summaryrefslogtreecommitdiffstats
path: root/include/telephony/ril_cdma_sms.h
blob: bcf6b30e760f6211629e0a27fee3a9a1b87bda32 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
/*
 * Copyright (C) 2006 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*
 * ISSUES:
 *
 */

/**
 * TODO
 *
 *
 */


#ifndef ANDROID_RIL_CDMA_SMS_H
#define ANDROID_RIL_CDMA_SMS_H 1

#include <stdlib.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Used by RIL_REQUEST_CDMA_SEND_SMS and RIL_UNSOL_RESPONSE_CDMA_NEW_SMS */

#define RIL_CDMA_SMS_ADDRESS_MAX     36
#define RIL_CDMA_SMS_SUBADDRESS_MAX  36
#define RIL_CDMA_SMS_BEARER_DATA_MAX 255

typedef enum {
    RIL_CDMA_SMS_DIGIT_MODE_4_BIT = 0,     /* DTMF digits */
    RIL_CDMA_SMS_DIGIT_MODE_8_BIT = 1,
    RIL_CDMA_SMS_DIGIT_MODE_MAX32 = 0x10000000 /* Force constant ENUM size in structures */
} RIL_CDMA_SMS_DigitMode;

typedef enum {
    RIL_CDMA_SMS_NUMBER_MODE_NOT_DATA_NETWORK = 0,
    RIL_CDMA_SMS_NUMBER_MODE_DATA_NETWORK     = 1,
    RIL_CDMA_SMS_NUMBER_MODE_MAX32 = 0x10000000 /* Force constant ENUM size in structures */
} RIL_CDMA_SMS_NumberMode;

typedef enum {
    RIL_CDMA_SMS_NUMBER_TYPE_UNKNOWN                   = 0,
    RIL_CDMA_SMS_NUMBER_TYPE_INTERNATIONAL_OR_DATA_IP  = 1,
      /* INTERNATIONAL is used when number mode is not data network address.
       * DATA_IP is used when the number mode is data network address
       */
    RIL_CDMA_SMS_NUMBER_TYPE_NATIONAL_OR_INTERNET_MAIL = 2,
      /* NATIONAL is used when the number mode is not data network address.
       * INTERNET_MAIL is used when the number mode is data network address.
       * For INTERNET_MAIL, in the address data "digits", each byte contains
       * an ASCII character. Examples are "x@y.com,a@b.com - ref TIA/EIA-637A 3.4.3.3
       */
    RIL_CDMA_SMS_NUMBER_TYPE_NETWORK                   = 3,
    RIL_CDMA_SMS_NUMBER_TYPE_SUBSCRIBER                = 4,
    RIL_CDMA_SMS_NUMBER_TYPE_ALPHANUMERIC              = 5,
      /* GSM SMS: address value is GSM 7-bit chars */
    RIL_CDMA_SMS_NUMBER_TYPE_ABBREVIATED               = 6,
    RIL_CDMA_SMS_NUMBER_TYPE_RESERVED_7                = 7,
    RIL_CDMA_SMS_NUMBER_TYPE_MAX32 = 0x10000000 /* Force constant ENUM size in structures */
} RIL_CDMA_SMS_NumberType;

typedef enum {
    RIL_CDMA_SMS_NUMBER_PLAN_UNKNOWN     = 0,
    RIL_CDMA_SMS_NUMBER_PLAN_TELEPHONY   = 1,      /* CCITT E.164 and E.163, including ISDN plan */
    RIL_CDMA_SMS_NUMBER_PLAN_RESERVED_2  = 2,
    RIL_CDMA_SMS_NUMBER_PLAN_DATA        = 3,      /* CCITT X.121 */
    RIL_CDMA_SMS_NUMBER_PLAN_TELEX       = 4,      /* CCITT F.69 */
    RIL_CDMA_SMS_NUMBER_PLAN_RESERVED_5  = 5,
    RIL_CDMA_SMS_NUMBER_PLAN_RESERVED_6  = 6,
    RIL_CDMA_SMS_NUMBER_PLAN_RESERVED_7  = 7,
    RIL_CDMA_SMS_NUMBER_PLAN_RESERVED_8  = 8,
    RIL_CDMA_SMS_NUMBER_PLAN_PRIVATE     = 9,
    RIL_CDMA_SMS_NUMBER_PLAN_RESERVED_10 = 10,
    RIL_CDMA_SMS_NUMBER_PLAN_RESERVED_11 = 11,
    RIL_CDMA_SMS_NUMBER_PLAN_RESERVED_12 = 12,
    RIL_CDMA_SMS_NUMBER_PLAN_RESERVED_13 = 13,
    RIL_CDMA_SMS_NUMBER_PLAN_RESERVED_14 = 14,
    RIL_CDMA_SMS_NUMBER_PLAN_RESERVED_15 = 15,
    RIL_CDMA_SMS_NUMBER_PLAN_MAX32 = 0x10000000 /* Force constant ENUM size in structures */
} RIL_CDMA_SMS_NumberPlan;

typedef struct {
    RIL_CDMA_SMS_DigitMode digit_mode;
      /* Indicates 4-bit or 8-bit */
    RIL_CDMA_SMS_NumberMode number_mode;
      /* Used only when digitMode is 8-bit */
    RIL_CDMA_SMS_NumberType number_type;
      /* Used only when digitMode is 8-bit.
       * To specify an international address, use the following:
       * digitMode = RIL_CDMA_SMS_DIGIT_MODE_8_BIT
       * numberMode = RIL_CDMA_SMS_NOT_DATA_NETWORK
       * numberType = RIL_CDMA_SMS_NUMBER_TYPE_INTERNATIONAL_OR_DATA_IP
       * numberPlan = RIL_CDMA_SMS_NUMBER_PLAN_TELEPHONY
       * numberOfDigits = number of digits
       * digits = ASCII digits, e.g. '1', '2', '3'3, '4', and '5'
       */
    RIL_CDMA_SMS_NumberPlan number_plan;
      /* Used only when digitMode is 8-bit */
    unsigned char number_of_digits;
    unsigned char digits[ RIL_CDMA_SMS_ADDRESS_MAX ];
      /* Each byte in this array represnts a 40bit or 8-bit digit of address data */
} RIL_CDMA_SMS_Address;

typedef enum {
    RIL_CDMA_SMS_SUBADDRESS_TYPE_NSAP           = 0,    /* CCITT X.213 or ISO 8348 AD2 */
    RIL_CDMA_SMS_SUBADDRESS_TYPE_USER_SPECIFIED = 1,    /* e.g. X.25 */
    RIL_CDMA_SMS_SUBADDRESS_TYPE_MAX32 = 0x10000000 /* Force constant ENUM size in structures */
} RIL_CDMA_SMS_SubaddressType;

typedef struct {
    RIL_CDMA_SMS_SubaddressType subaddressType;
    /* 1 means the last byte's lower 4 bits should be ignored */
    unsigned char odd;
    unsigned char number_of_digits;
    /* Each byte respresents a 8-bit digit of subaddress data */
    unsigned char digits[ RIL_CDMA_SMS_SUBADDRESS_MAX ];
} RIL_CDMA_SMS_Subaddress;

typedef struct {
    int uTeleserviceID;
    unsigned char bIsServicePresent;
    int uServicecategory;
    RIL_CDMA_SMS_Address sAddress;
    RIL_CDMA_SMS_Subaddress sSubAddress;
    int uBearerDataLen;
    unsigned char aBearerData[ RIL_CDMA_SMS_BEARER_DATA_MAX ];
} RIL_CDMA_SMS_Message;

/* Used by RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE */

typedef enum {
    RIL_CDMA_SMS_NO_ERROR       = 0,
    RIL_CDMA_SMS_ERROR          = 1,
    RIL_CDMA_SMS_ERROR_MAX32 = 0x10000000 /* Force constant ENUM size in structures */
} RIL_CDMA_SMS_ErrorClass;

typedef struct {
    RIL_CDMA_SMS_ErrorClass uErrorClass;
    int uSMSCauseCode;  /* As defined in N.S00005, 6.5.2.125.
                           Currently, only 35 (resource shortage) and
                           39 (other terminal problem) are reported. */
} RIL_CDMA_SMS_Ack;

/* Used by RIL_REQUEST_CDMA_SMS_GET_BROADCAST_CONFIG and
   RIL_REQUEST_CDMA_SMS_SET_BROADCAST_CONFIG */

typedef struct {
    int service_category;
    int language;
    unsigned char selected;
} RIL_CDMA_BroadcastSmsConfigInfo;

/* Used by RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM */

typedef struct {
    int status;     /* Status of message.  See TS 27.005 3.1, "<stat>": */
                  /*      0 = "REC UNREAD"    */
                  /*      1 = "REC READ"      */
                  /*      2 = "STO UNSENT"    */
                  /*      3 = "STO SENT"      */

    RIL_CDMA_SMS_Message message;
} RIL_CDMA_SMS_WriteArgs;


/* Used by RIL_REQUEST_ENCODE_CDMA_SMS and RIL_REQUEST_DECODE_CDMA_SMS*/

#define RIL_CDMA_SMS_UDH_MAX_SND_SIZE           128
#define RIL_CDMA_SMS_UDH_EO_DATA_SEGMENT_MAX    131 /* 140 - 3 - 6 */
#define RIL_CDMA_SMS_MAX_UD_HEADERS         7
#define RIL_CDMA_SMS_USER_DATA_MAX     229
#define RIL_CDMA_SMS_ADDRESS_MAX            36
#define RIL_CDMA_SMS_UDH_LARGE_PIC_SIZE     128
#define RIL_CDMA_SMS_UDH_SMALL_PIC_SIZE     32
#define RIL_CDMA_SMS_UDH_VAR_PIC_SIZE       134
#define RIL_CDMA_SMS_UDH_ANIM_NUM_BITMAPS   4
#define RIL_CDMA_SMS_UDH_LARGE_BITMAP_SIZE  32
#define RIL_CDMA_SMS_UDH_SMALL_BITMAP_SIZE  8
#define RIL_CDMA_SMS_UDH_OTHER_SIZE         226
#define RIL_CDMA_SMS_IP_ADDRESS_SIZE        4

/* ------------------- */
/* ---- User Data ---- */
/* ------------------- */
typedef enum {
    RIL_CDMA_SMS_UDH_CONCAT_8         = 0x00,
    RIL_CDMA_SMS_UDH_SPECIAL_SM,
    /* 02 - 03    Reserved */
    RIL_CDMA_SMS_UDH_PORT_8           = 0x04,
    RIL_CDMA_SMS_UDH_PORT_16,
    RIL_CDMA_SMS_UDH_SMSC_CONTROL,
    RIL_CDMA_SMS_UDH_SOURCE,
    RIL_CDMA_SMS_UDH_CONCAT_16,
    RIL_CDMA_SMS_UDH_WCMP,
    RIL_CDMA_SMS_UDH_TEXT_FORMATING,
    RIL_CDMA_SMS_UDH_PRE_DEF_SOUND,
    RIL_CDMA_SMS_UDH_USER_DEF_SOUND,
    RIL_CDMA_SMS_UDH_PRE_DEF_ANIM,
    RIL_CDMA_SMS_UDH_LARGE_ANIM,
    RIL_CDMA_SMS_UDH_SMALL_ANIM,
    RIL_CDMA_SMS_UDH_LARGE_PICTURE,
    RIL_CDMA_SMS_UDH_SMALL_PICTURE,
    RIL_CDMA_SMS_UDH_VAR_PICTURE,

    RIL_CDMA_SMS_UDH_USER_PROMPT      = 0x13,
    RIL_CDMA_SMS_UDH_EXTENDED_OBJECT  = 0x14,

    /* 15 - 1F    Reserved for future EMS */

    RIL_CDMA_SMS_UDH_RFC822           = 0x20,

    /*  21 - 6F    Reserved for future use */
    /*  70 - 7f    Reserved for (U)SIM Toolkit Security Headers */
    /*  80 - 9F    SME to SME specific use */
    /*  A0 - BF    Reserved for future use */
    /*  C0 - DF    SC specific use */
    /*  E0 - FF    Reserved for future use */

    RIL_CDMA_SMS_UDH_OTHER            = 0xFFFF, /* For unsupported or proprietary headers */
    RIL_CDMA_SMS_UDH_ID_MAX32 = 0x10000000   /* Force constant ENUM size in structures */

} RIL_CDMA_SMS_UdhId;

typedef struct {
    /*indicates the reference number for a particular concatenated short message. */
    /*it is constant for every short message which makes up a particular concatenated short message*/
    unsigned char       msg_ref;

    /*indicates the total number of short messages within the concatenated short message.
     The value shall start at 1 and remain constant for every
     short message which makes up the concatenated short message.
     if it is 0 then the receiving entity shall ignore the whole Information Element*/
    unsigned char       total_sm;

    /*
     * it indicates the sequence number of a particular short message within the concatenated short
     * message. The value shall start at 1 and increment by one for every short message sent
     * within the concatenated short message. If the value is zero or the value is
     * greater than the value in octet 2 then the receiving
     * entity shall ignore the whole Information Element.
     */
    unsigned char      seq_num;
} RIL_CDMA_SMS_UdhConcat8;

/* GW message waiting actions
*/
typedef enum {
    RIL_CDMA_SMS_GW_MSG_WAITING_NONE,
    RIL_CDMA_SMS_GW_MSG_WAITING_DISCARD,
    RIL_CDMA_SMS_GW_MSG_WAITING_STORE,
    RIL_CDMA_SMS_GW_MSG_WAITING_NONE_1111,
    RIL_CDMA_SMS_GW_MSG_WAITING_MAX32 = 0x10000000 /* Force constant ENUM size in structures */
} RIL_CDMA_SMS_GWMsgWaiting;

/* GW message waiting types
*/
typedef enum {
    RIL_CDMA_SMS_GW_MSG_WAITING_VOICEMAIL,
    RIL_CDMA_SMS_GW_MSG_WAITING_FAX,
    RIL_CDMA_SMS_GW_MSG_WAITING_EMAIL,
    RIL_CDMA_SMS_GW_MSG_WAITING_OTHER,
    RIL_CDMA_SMS_GW_MSG_WAITING_KIND_MAX32 = 0x10000000   /* Force constant ENUM size in structures */
} RIL_CDMA_SMS_GWMsgWaitingKind;

typedef struct {
    RIL_CDMA_SMS_GWMsgWaiting                 msg_waiting;
    RIL_CDMA_SMS_GWMsgWaitingKind             msg_waiting_kind;

    /*it indicates the number of messages of the type specified in Octet 1 waiting.*/
    unsigned char                             message_count;
} RIL_CDMA_SMS_UdhSpecialSM;

typedef struct {
    unsigned char  dest_port;
    unsigned char  orig_port;
} RIL_CDMA_SMS_UdhWap8;

typedef struct {
    unsigned short  dest_port;
    unsigned short  orig_port;
} RIL_CDMA_SMS_UdhWap16;

typedef struct {
    unsigned short      msg_ref;
    unsigned char       total_sm;
    unsigned char       seq_num;

} RIL_CDMA_SMS_UdhConcat16;

typedef enum {
    RIL_CDMA_SMS_UDH_LEFT_ALIGNMENT = 0,
    RIL_CDMA_SMS_UDH_CENTER_ALIGNMENT,
    RIL_CDMA_SMS_UDH_RIGHT_ALIGNMENT,
    RIL_CDMA_SMS_UDH_DEFAULT_ALIGNMENT,
    RIL_CDMA_SMS_UDH_MAX_ALIGNMENT,
    RIL_CDMA_SMS_UDH_ALIGNMENT_MAX32 = 0x10000000   /* Force constant ENUM size in structures */
} RIL_CDMA_SMS_UdhAlignment;

typedef enum {
    RIL_CDMA_SMS_UDH_FONT_NORMAL = 0,
    RIL_CDMA_SMS_UDH_FONT_LARGE,
    RIL_CDMA_SMS_UDH_FONT_SMALL,
    RIL_CDMA_SMS_UDH_FONT_RESERVED,
    RIL_CDMA_SMS_UDH_FONT_MAX,
    RIL_CDMA_SMS_UDH_FONT_MAX32 = 0x10000000   /* Force constant ENUM size in structures */
} RIL_CDMA_SMS_UdhFontSize;

typedef enum {
    RIL_CDMA_SMS_UDH_TEXT_COLOR_BLACK          = 0x0,
    RIL_CDMA_SMS_UDH_TEXT_COLOR_DARK_GREY      = 0x1,
    RIL_CDMA_SMS_UDH_TEXT_COLOR_DARK_RED       = 0x2,
    RIL_CDMA_SMS_UDH_TEXT_COLOR_DARK_YELLOW    = 0x3,
    RIL_CDMA_SMS_UDH_TEXT_COLOR_DARK_GREEN     = 0x4,
    RIL_CDMA_SMS_UDH_TEXT_COLOR_DARK_CYAN      = 0x5,
    RIL_CDMA_SMS_UDH_TEXT_COLOR_DARK_BLUE      = 0x6,
    RIL_CDMA_SMS_UDH_TEXT_COLOR_DARK_MAGENTA   = 0x7,
    RIL_CDMA_SMS_UDH_TEXT_COLOR_GREY           = 0x8,
    RIL_CDMA_SMS_UDH_TEXT_COLOR_WHITE          = 0x9,
    RIL_CDMA_SMS_UDH_TEXT_COLOR_BRIGHT_RED     = 0xA,
    RIL_CDMA_SMS_UDH_TEXT_COLOR_BRIGHT_YELLOW  = 0xB,
    RIL_CDMA_SMS_UDH_TEXT_COLOR_BRIGHT_GREEN   = 0xC,
    RIL_CDMA_SMS_UDH_TEXT_COLOR_BRIGHT_CYAN    = 0xD,
    RIL_CDMA_SMS_UDH_TEXT_COLOR_BRIGHT_BLUE    = 0xE,
    RIL_CDMA_SMS_UDH_TEXT_COLOR_BRIGHT_MAGENTA = 0xF,
    RIL_CDMA_SMS_UDH_TEXT_COLOR_MAX32 = 0x10000000   /* Force constant ENUM size in structures */
} RIL_CDMA_SMS_UdhTextColor;

typedef struct {
    unsigned char              start_position;
    unsigned char              text_formatting_length;
    RIL_CDMA_SMS_UdhAlignment  alignment_type ;       /*bit 0 and  bit 1*/
    RIL_CDMA_SMS_UdhFontSize   font_size ;            /*bit 3 and  bit 2*/
    unsigned char              style_bold;            /*bit 4 */
    unsigned char              style_italic;          /*bit 5  */
    unsigned char              style_underlined;      /*bit 6 */
    unsigned char              style_strikethrough;   /*bit 7 */

    /* if FALSE, ignore the following color information */
    unsigned char              is_color_present;
    RIL_CDMA_SMS_UdhTextColor  text_color_foreground;
    RIL_CDMA_SMS_UdhTextColor  text_color_background;

} RIL_CDMA_SMS_UdhTextFormating;

/* Predefined sound
*/
typedef struct {
    unsigned char       position;
    unsigned char       snd_number;
} RIL_CDMA_SMS_UdhPreDefSound;

/* User Defined sound
*/
typedef struct {
    unsigned char       data_length;
    unsigned char       position;
    unsigned char       user_def_sound[RIL_CDMA_SMS_UDH_MAX_SND_SIZE];
} RIL_CDMA_SMS_UdhUserDefSound;

/* Large picture
*/
typedef struct {
    unsigned char       position;
    unsigned char       data[RIL_CDMA_SMS_UDH_LARGE_PIC_SIZE];
} RIL_CDMA_SMS_UdhLargePictureData;

/* Small picture
*/
typedef struct {
    unsigned char       position;
    unsigned char       data[RIL_CDMA_SMS_UDH_SMALL_PIC_SIZE];
} RIL_CDMA_SMS_UdhSmallPictureData;

/* Variable length picture
*/
typedef struct {
    unsigned char       position;
    unsigned char       width;    /* Number of pixels - Should be a mutliple of 8 */
    unsigned char       height;
    unsigned char       data[RIL_CDMA_SMS_UDH_VAR_PIC_SIZE];
} RIL_CDMA_SMS_UdhVarPicture;

/* Predefined animation
*/
typedef struct {
    unsigned char       position;
    unsigned char       animation_number;
} RIL_CDMA_SMS_UdhPreDefAnim;

/* Large animation
*/
typedef struct {
    unsigned char       position;
    unsigned char       data[RIL_CDMA_SMS_UDH_ANIM_NUM_BITMAPS][RIL_CDMA_SMS_UDH_LARGE_BITMAP_SIZE];
} RIL_CDMA_SMS_UdhLargeAnim;

/* Small animation
*/
typedef struct {
    unsigned char       position;
    unsigned char       data[RIL_CDMA_SMS_UDH_ANIM_NUM_BITMAPS][RIL_CDMA_SMS_UDH_SMALL_BITMAP_SIZE];
} RIL_CDMA_SMS_UdhSmallAnim;

/* User Prompt Indicator UDH
*/
typedef struct {
    unsigned char       number_of_objects;
    /* Number of objects of the same kind that follow this header which will
    ** be stitched together by the applications. For example, 5 small pictures
    ** are to be stitched together horizontally, or 6 iMelody tones are to be
    ** connected together with intermediate iMelody header and footer ignored.
    ** Allowed objects to be stitched:
    **   - Images (small, large, variable)
    **   - User defined sounds
    */
} RIL_CDMA_SMS_UdhUserPrompt;

typedef struct {
    unsigned char         length;

    unsigned char         data[RIL_CDMA_SMS_UDH_EO_DATA_SEGMENT_MAX];
    /* RIL_CDMA_SMS_UDH_EO_VCARD: See http://www.imc.org/pdi/vcard-21.doc for payload */
    /* RIL_CDMA_SMS_UDH_EO_VCALENDAR: See http://www.imc.org/pdi/vcal-10.doc */
    /* Or: Unsupported/proprietary extended objects */

} RIL_CDMA_SMS_UdhEoContent;

/* Extended Object UDH
*/
/* Extended Object IDs/types
*/
typedef enum {
    RIL_CDMA_SMS_UDH_EO_VCARD                   = 0x09,
    RIL_CDMA_SMS_UDH_EO_VCALENDAR               = 0x0A,
    RIL_CDMA_SMS_UDH_EO_MAX32 = 0x10000000   /* Force constant ENUM size in structures */
} RIL_CDMA_SMS_UdhEoId;

typedef struct {
    /* Extended objects are to be used together with 16-bit concatenation
    ** UDH. The max number of segments supported for E.O. is 8 at least.
    */
    RIL_CDMA_SMS_UdhEoContent    content;

    unsigned char                                 first_segment;
    /* The following fields are only present in the first segment of a
    ** concatenated SMS message.
    */
   unsigned char                                   reference;
    /* Identify those extended object segments which should be linked together
    */
   unsigned short                                  length;
    /* Length of the whole extended object data
    */
    unsigned char                                   control;
    RIL_CDMA_SMS_UdhEoId                    type;
    unsigned short                                  position;
    /* Absolute position of the E.O. in the whole text after concatenation,
    ** starting from 1.
    */
} RIL_CDMA_SMS_UdhEo;

typedef struct {
    RIL_CDMA_SMS_UdhId  header_id;
    unsigned char               header_length;
    unsigned char              data[RIL_CDMA_SMS_UDH_OTHER_SIZE];
} RIL_CDMA_SMS_UdhOther;

typedef struct {
    unsigned char        header_length;
} RIL_CDMA_SMS_UdhRfc822;

typedef struct {
    RIL_CDMA_SMS_UdhId                header_id;

    union {
        RIL_CDMA_SMS_UdhConcat8             concat_8;       // 00

        RIL_CDMA_SMS_UdhSpecialSM           special_sm;     // 01
        RIL_CDMA_SMS_UdhWap8                wap_8;          // 04
        RIL_CDMA_SMS_UdhWap16               wap_16;         // 05
        RIL_CDMA_SMS_UdhConcat16            concat_16;      // 08
        RIL_CDMA_SMS_UdhTextFormating       text_formating; // 0a
        RIL_CDMA_SMS_UdhPreDefSound         pre_def_sound;  // 0b
        RIL_CDMA_SMS_UdhUserDefSound        user_def_sound; // 0c
        RIL_CDMA_SMS_UdhPreDefAnim          pre_def_anim;   // 0d
        RIL_CDMA_SMS_UdhLargeAnim           large_anim;     // 0e
        RIL_CDMA_SMS_UdhSmallAnim           small_anim;     // 0f
        RIL_CDMA_SMS_UdhLargePictureData    large_picture;  // 10
        RIL_CDMA_SMS_UdhSmallPictureData    small_picture;  // 11
        RIL_CDMA_SMS_UdhVarPicture          var_picture;    // 12

        RIL_CDMA_SMS_UdhUserPrompt          user_prompt;    // 13
        RIL_CDMA_SMS_UdhEo                  eo;             // 14

        RIL_CDMA_SMS_UdhRfc822              rfc822;         // 20
        RIL_CDMA_SMS_UdhOther               other;

    }u;
} RIL_CDMA_SMS_Udh;

/* ----------------------------- */
/* -- User data encoding type -- */
/* ----------------------------- */
typedef enum {
    RIL_CDMA_SMS_ENCODING_OCTET        = 0,    /* 8-bit */
    RIL_CDMA_SMS_ENCODING_IS91EP,              /* varies */
    RIL_CDMA_SMS_ENCODING_ASCII,               /* 7-bit */
    RIL_CDMA_SMS_ENCODING_IA5,                 /* 7-bit */
    RIL_CDMA_SMS_ENCODING_UNICODE,             /* 16-bit */
    RIL_CDMA_SMS_ENCODING_SHIFT_JIS,           /* 8 or 16-bit */
    RIL_CDMA_SMS_ENCODING_KOREAN,              /* 8 or 16-bit */
    RIL_CDMA_SMS_ENCODING_LATIN_HEBREW,        /* 8-bit */
    RIL_CDMA_SMS_ENCODING_LATIN,               /* 8-bit */
    RIL_CDMA_SMS_ENCODING_GSM_7_BIT_DEFAULT,   /* 7-bit */
    RIL_CDMA_SMS_ENCODING_MAX32        = 0x10000000

} RIL_CDMA_SMS_UserDataEncoding;

/* ------------------------ */
/* -- IS-91 EP data type -- */
/* ------------------------ */
typedef enum {
    RIL_CDMA_SMS_IS91EP_VOICE_MAIL         = 0x82,
    RIL_CDMA_SMS_IS91EP_SHORT_MESSAGE_FULL = 0x83,
    RIL_CDMA_SMS_IS91EP_CLI_ORDER          = 0x84,
    RIL_CDMA_SMS_IS91EP_SHORT_MESSAGE      = 0x85,
    RIL_CDMA_SMS_IS91EP_MAX32              = 0x10000000

} RIL_CDMA_SMS_IS91EPType;

typedef struct {
    /* NOTE: If message_id.udh_present == TRUE:
    **       'num_headers' is the number of User Data Headers (UDHs),
    **       and 'headers' include all those headers.
    */
    unsigned char                              num_headers;
    RIL_CDMA_SMS_Udh                     headers[RIL_CDMA_SMS_MAX_UD_HEADERS];

    RIL_CDMA_SMS_UserDataEncoding      encoding;
    RIL_CDMA_SMS_IS91EPType             is91ep_type;

    /*----------------------------------------------------------------------
     'data_len' indicates the valid number of bytes in the 'data' array.

     'padding_bits' (0-7) indicates how many bits in the last byte of 'data'
     are invalid bits. This parameter is only used for Mobile-Originated
     messages. There is no way for the API to tell how many padding bits
     exist in the received message. Instead, the application can find out how
     many padding bits exist in the user data when decoding the user data.

     'data' has the raw bits of the user data field of the SMS message.
     The client software should decode the raw user data according to its
     supported encoding types and languages.

     EXCEPTION 1: CMT-91 user data raw bits are first translated into BD fields
     (e.g. num_messages, callback, etc.) The translated user data field in
     VMN and Short Message is in the form of ASCII characters, each occupying
     a byte in the resulted 'data'.

     EXCEPTION 2: GSM 7-bit Default characters are decoded so that each byte
     has one 7-bit GSM character.

     'number_of_digits' is the number of digits/characters (7, 8, 16, or
     whatever bits) in the raw user data, which can be used by the client
     when decoding the user data according to the encoding type and language.
    -------------------------------------------------------------------------*/
    unsigned char                                data_len;
    unsigned char                                padding_bits;
    unsigned char                                data[ RIL_CDMA_SMS_USER_DATA_MAX ];
    unsigned char                                number_of_digits;

} RIL_CDMA_SMS_CdmaUserData;

/* -------------------- */
/* ---- Message Id ---- */
/* -------------------- */
typedef enum {
    RIL_CDMA_SMS_BD_TYPE_RESERVED_0     = 0,
    RIL_CDMA_SMS_BD_TYPE_DELIVER,       /* MT only */
    RIL_CDMA_SMS_BD_TYPE_SUBMIT,        /* MO only */
    RIL_CDMA_SMS_BD_TYPE_CANCELLATION,  /* MO only */
    RIL_CDMA_SMS_BD_TYPE_DELIVERY_ACK,  /* MT only */
    RIL_CDMA_SMS_BD_TYPE_USER_ACK,      /* MT & MO */
    RIL_CDMA_SMS_BD_TYPE_READ_ACK,      /* MT & MO */
    RIL_CDMA_SMS_BD_TYPE_MAX32          = 0x10000000

} RIL_CDMA_SMS_BdMessageType;

typedef unsigned int  RIL_CDMA_SMS_MessageNumber;

typedef struct {
    RIL_CDMA_SMS_BdMessageType   type;
    RIL_CDMA_SMS_MessageNumber      id_number;
    unsigned char                      udh_present;
    /* NOTE: if FEATURE_SMS_UDH is not defined,
    ** udh_present should be ignored.
    */
} RIL_CDMA_SMS_MessageId;

typedef unsigned char           RIL_CDMA_SMS_UserResponse;

/* ------------------- */
/* ---- Timestamp ---- */
/* ------------------- */
typedef struct {
    /* If 'year' is between 96 and 99, the actual year is 1900 + 'year';
       if 'year' is between 00 and 95, the actual year is 2000 + 'year'.
       NOTE: Each field has two BCD digits and byte arrangement is <MSB, ... ,LSB>
    */
    unsigned char      year;        /* 0x00-0x99 */
    unsigned char      month;       /* 0x01-0x12 */
    unsigned char      day;         /* 0x01-0x31 */
    unsigned char      hour;        /* 0x00-0x23 */
    unsigned char      minute;      /* 0x00-0x59 */
    unsigned char      second;      /* 0x00-0x59 */
    signed char      timezone;    /* +/-, [-48,+48] number of 15 minutes - GW only */
} RIL_CDMA_SMS_Timestamp;

/* ------------------ */
/* ---- Priority ---- */
/* ------------------ */
typedef enum {
    RIL_CDMA_SMS_PRIORITY_NORMAL      = 0,
    RIL_CDMA_SMS_PRIORITY_INTERACTIVE,
    RIL_CDMA_SMS_PRIORITY_URGENT,
    RIL_CDMA_SMS_PRIORITY_EMERGENCY,
    RIL_CDMA_SMS_PRIORITY_MAX32       = 0x10000000

} RIL_CDMA_SMS_Priority;

/* ----------------- */
/* ---- Privacy ---- */
/* ----------------- */
typedef enum {
    RIL_CDMA_SMS_PRIVACY_NORMAL      = 0,
    RIL_CDMA_SMS_PRIVACY_RESTRICTED,
    RIL_CDMA_SMS_PRIVACY_CONFIDENTIAL,
    RIL_CDMA_SMS_PRIVACY_SECRET,
    RIL_CDMA_SMS_PRIVACY_MAX32       = 0x10000000

} RIL_CDMA_SMS_Privacy;

/* ---------------------- */
/* ---- Reply option ---- */
/* ---------------------- */
typedef struct {
    /* whether user ack is requested
    */
    unsigned char          user_ack_requested;

    /* whether delivery ack is requested.
       Should be FALSE for incoming messages.
    */
    unsigned char          delivery_ack_requested;

    /* Message originator requests the receiving phone to send back a READ_ACK
    ** message automatically when the user reads the received message.
    */
    unsigned char          read_ack_requested;

} RIL_CDMA_SMS_ReplyOption;

typedef enum {
    RIL_CDMA_SMS_ALERT_MODE_DEFAULT         = 0,
    RIL_CDMA_SMS_ALERT_MODE_LOW_PRIORITY    = 1,
    RIL_CDMA_SMS_ALERT_MODE_MEDIUM_PRIORITY = 2,
    RIL_CDMA_SMS_ALERT_MODE_HIGH_PRIORITY   = 3,

    /* For pre-IS637A implementations, alert_mode only has values of True/False:
    */
    RIL_CDMA_SMS_ALERT_MODE_OFF   = 0,
    RIL_CDMA_SMS_ALERT_MODE_ON    = 1

} RIL_CDMA_SMS_AlertMode;

/* ------------------ */
/* ---- Language ---- */
/* ------------------ */
typedef enum {
    RIL_CDMA_SMS_LANGUAGE_UNSPECIFIED = 0,
    RIL_CDMA_SMS_LANGUAGE_ENGLISH,
    RIL_CDMA_SMS_LANGUAGE_FRENCH,
    RIL_CDMA_SMS_LANGUAGE_SPANISH,
    RIL_CDMA_SMS_LANGUAGE_JAPANESE,
    RIL_CDMA_SMS_LANGUAGE_KOREAN,
    RIL_CDMA_SMS_LANGUAGE_CHINESE,
    RIL_CDMA_SMS_LANGUAGE_HEBREW,
    RIL_CDMA_SMS_LANGUAGE_MAX32       = 0x10000000

} RIL_CDMA_SMS_Language;

/* ---------------------------------- */
/* ---------- Display Mode ---------- */
/* ---------------------------------- */
typedef enum {
    RIL_CDMA_SMS_DISPLAY_MODE_IMMEDIATE   = 0,
    RIL_CDMA_SMS_DISPLAY_MODE_DEFAULT     = 1,
    RIL_CDMA_SMS_DISPLAY_MODE_USER_INVOKE = 2,
    RIL_CDMA_SMS_DISPLAY_MODE_RESERVED    = 3
} RIL_CDMA_SMS_DisplayMode;

/* IS-637B parameters/fields
*/

/* ---------------------------------- */
/* ---------- Delivery Status ------- */
/* ---------------------------------- */
typedef enum {
    RIL_CDMA_SMS_DELIVERY_STATUS_ACCEPTED              = 0,    /* ERROR_CLASS_NONE */
    RIL_CDMA_SMS_DELIVERY_STATUS_DEPOSITED_TO_INTERNET = 1,    /* ERROR_CLASS_NONE */
    RIL_CDMA_SMS_DELIVERY_STATUS_DELIVERED             = 2,    /* ERROR_CLASS_NONE */
    RIL_CDMA_SMS_DELIVERY_STATUS_CANCELLED             = 3,    /* ERROR_CLASS_NONE */

    RIL_CDMA_SMS_DELIVERY_STATUS_NETWORK_CONGESTION  = 4,    /* ERROR_CLASS_TEMP & PERM */
    RIL_CDMA_SMS_DELIVERY_STATUS_NETWORK_ERROR       = 5,    /* ERROR_CLASS_TEMP & PERM */
    RIL_CDMA_SMS_DELIVERY_STATUS_CANCEL_FAILED       = 6,    /* ERROR_CLASS_PERM */
    RIL_CDMA_SMS_DELIVERY_STATUS_BLOCKED_DESTINATION = 7,    /* ERROR_CLASS_PERM */
    RIL_CDMA_SMS_DELIVERY_STATUS_TEXT_TOO_LONG       = 8,    /* ERROR_CLASS_PERM */
    RIL_CDMA_SMS_DELIVERY_STATUS_DUPLICATE_MESSAGE   = 9,    /* ERROR_CLASS_PERM */
    RIL_CDMA_SMS_DELIVERY_STATUS_INVALID_DESTINATION = 10,   /* ERROR_CLASS_PERM */
    RIL_CDMA_SMS_DELIVERY_STATUS_MESSAGE_EXPIRED     = 13,   /* ERROR_CLASS_PERM */

    RIL_CDMA_SMS_DELIVERY_STATUS_UNKNOWN_ERROR       = 0x1F  /* ERROR_CLASS_PERM */

    /* All the other values are reserved */

} RIL_CDMA_SMS_DeliveryStatusE;

typedef struct {
    RIL_CDMA_SMS_ErrorClass       error_class;
    RIL_CDMA_SMS_DeliveryStatusE   status;
} RIL_CDMA_SMS_DeliveryStatus;

typedef struct {
    unsigned char               address[RIL_CDMA_SMS_IP_ADDRESS_SIZE];
    unsigned char             is_valid;
} RIL_CDMA_SMS_IpAddress;

/* This special parameter captures any unrecognized/proprietary parameters
*/
typedef struct {
    unsigned char                         input_other_len;
    unsigned char                         desired_other_len; /* used during decoding */
    unsigned char                         * other_data;
} RIL_CDMA_SMS_OtherParm;

typedef struct {
    /* the mask indicates which fields are present in this message */
    unsigned int                        mask;

    RIL_CDMA_SMS_MessageId         message_id;
    RIL_CDMA_SMS_CdmaUserData     user_data;
    RIL_CDMA_SMS_UserResponse        user_response;
    RIL_CDMA_SMS_Timestamp          mc_time;
    RIL_CDMA_SMS_Timestamp          validity_absolute;
    RIL_CDMA_SMS_Timestamp          validity_relative;
    RIL_CDMA_SMS_Timestamp          deferred_absolute;
    RIL_CDMA_SMS_Timestamp          deferred_relative;
    RIL_CDMA_SMS_Priority           priority;
    RIL_CDMA_SMS_Privacy            privacy;
    RIL_CDMA_SMS_ReplyOption       reply_option;
    unsigned char                         num_messages;  /* the actual value; not BCDs */
    RIL_CDMA_SMS_AlertMode         alert_mode;
     /* For pre-IS-637A implementations, alert_mode is either Off or On. */
    RIL_CDMA_SMS_Language           language;
    RIL_CDMA_SMS_Address            callback;
    RIL_CDMA_SMS_DisplayMode       display_mode;

    RIL_CDMA_SMS_DeliveryStatus    delivery_status;
    unsigned int                        deposit_index;

    RIL_CDMA_SMS_IpAddress         ip_address;
    unsigned char                         rsn_no_notify;

    /* See function comments of wms_ts_decode() and
    ** wms_ts_decode_cdma_bd_with_other() for details regarding 'other' parameters
    */
    RIL_CDMA_SMS_OtherParm         other;

} RIL_CDMA_SMS_ClientBd;

typedef struct {
    unsigned char length;   /* length, in bytes, of the encoded SMS message */
    unsigned char * data;   /* the encoded SMS message (max 255 bytes) */
} RIL_CDMA_Encoded_SMS;

#ifdef __cplusplus
}
#endif

#endif /*ANDROID_RIL_CDMA_SMS_H*/