custom_l4_utility.c
51.1 KB
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
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
/*****************************************************************************
* Copyright Statement:
* --------------------
* This software is protected by Copyright and the information contained
* herein is confidential. The software may not be copied and the information
* contained herein may not be used or disclosed except with the written
* permission of MediaTek Inc. (C) 2005
*
* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/
/*****************************************************************************
* Filename:
* ---------
* custom_l4_utility.c
*
* Project:
* --------
* MAUI
*
* Description:
* ------------
* This file is used for L4C customization
*
* Author:
* -------
* -------
*
*============================================================================
* HISTORY
* Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*------------------------------------------------------------------------------
* removed!
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*============================================================================
****************************************************************************/
//#include "kal_non_specific_general_types.h"
//#include <stdio.h>
//#include <string.h>
//#include "kal_release.h"
//#include "stack_common.h"
//#include "stack_msgs.h"
//#include "app_ltlcom.h" /* Task message communiction */
//#include "stacklib.h" /* Basic type for dll, evshed, stacktimer */
//#include "app_buff_alloc.h"
//#include "stack_timer.h"
//#include "event_shed.h"
//#include "nvram_editor_data_item.h"
//#include "custom_nvram_editor_data_item.h"
#ifdef __MMI_FMI__
//#include "custom_mmi_default_value.h"
#endif
//#include "l4_defs.h"
//#include "uart_sw.h"
//#include "kbd_table.h"
//#include "rmmi_parser.h"
#if defined (__MTK_UL1_FDD__)
#if !defined (UL1_NOT_PRESENT)
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif
#endif
#include "kal_general_types.h"
//#include "stack_config.h"
#include "kal_public_api.h"
#include "csmcc_enums.h"
#include "l4_ps_api.h"
#define CM_DTMF_P_W_SWITCH_FLAG KAL_FALSE
//define codec num
#define SUPPORTED_2G_CODEC_NUM 6
#define CUSTOM_ACM_BOUND (1000)
#define CSM_RLC_TIMER_CONFIG (3)
#ifdef __FWP_NC_LAI_INFO__
#define CELL_LOCK_PREFIX_LEN 4
kal_uint8 CELL_LOCK_PREFIX[CELL_LOCK_PREFIX_LEN] = {0x0d, 0x00, 0x00, 0x01};
#endif /*__FWP_NC_LAI_INFO__*/
/* MAUI_01637672 support CCWE */
#define CUSTOM_ACM_CALL_METER_WARNING_EVENT_SECONDS (30)
//mtk00924 20051026: +EIMG and +EMDY download to MS default folder name customization
//at most 25 characters in UCS2 format for folder name, and 0x005C and 0x0000 should be given at the end
kal_wchar CUSTOM_AT_AUDIO_DOWNLOAD_FOLDER_NAME[] = {0x0041, 0x0075, 0x0064, 0x0069, 0x006F, 0x005C, 0x0000}; /* default folder = Audio */
kal_wchar CUSTOM_AT_IMAGE_DOWNLOAD_FOLDER_NAME[] = {0x0049, 0x006D, 0x0061, 0x0067, 0x0065, 0x0073, 0x005C, 0x0000}; /* default folder = Images */
#include "ps_em_enum.h"
#include "dcl.h"
#if defined(__GEMINI__) && defined(__SIM_ME_LOCK__)
#include "smu_common_enums.h" //link_SML
#endif
/*****************************************************************************
If customer want to use other character instead of '?' as wild character
Please re-define this CUSTOM_WILD_CHAR
[Note!!] Wild character definition should be unique and sync with MMI display
[Note!!] This is used only apply to L4 protocol.
Customer still need to revise the definition in MMI and Phonebook
*****************************************************************************/
#define CUSTOM_WILD_CHAR '?'
/*****************************************************************************
If customer want to use other character instead of 'w' as auto dtmf modifier
Please re-define this CUSTOM_AUTO_DTMF_MODIFIER
[Note 1] Please always use lowercase character e.g. use 't' instead of 'T'
[Note 2] Auto DTMF modifier definition should be unique and sync with MMI display
[Note 3] This is used only apply to L4 protocol.
Customer still need to revise the definition in MMI and Phonebook
*****************************************************************************/
#define CUSTOM_AUTO_DTMF_MODIFIER 'w'
/*****************************************************************************
* FUNCTION
* custom_wild_char()
* DESCRIPTION
* This function is used to return wild character definition
*
* PARAMETERS
* none
* RETURNS
* wild character definition
*****************************************************************************/
kal_uint8 custom_wild_char(void)
{
return CUSTOM_WILD_CHAR;
}
/*****************************************************************************
* FUNCTION
* custom_auto_dtmf_modifer()
* DESCRIPTION
* This function is used to return auto DTMF modifier definition
*
* PARAMETERS
* none
* RETURNS
* auto dtmf modifier definition
*****************************************************************************/
kal_uint8 custom_auto_dtmf_modifier(void)
{
return CUSTOM_AUTO_DTMF_MODIFIER;
}
/*****************************************************************************
* FUNCTION
* custom_ext_modem_mod_id()
* DESCRIPTION
* This function is used to return external modem module id
*
* PARAMETERS
* none
* RETURNS
* External modem module id
*****************************************************************************/
#ifdef __EXT_MODEM__
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif
/*****************************************************************************
* FUNCTION
* custom_short_string_as_call()
* DESCRIPTION
* This function is used to define specific short string (1 or 2 digit dial string)
* that should be treat as call instead of USSD.
* In spec 22.030 Figure 3.5.3.2 it define short string except 2 digit starting
* with a '1' shall treat as USSD. However,there might be some special operator requirement
* ex: "86" is a operator service call number
* PARAMETERS
* kal_uint8 c1
* kal_uint8 c2
* kal_uint8 length
* RETURNS
* KAL_TRUE or KAL_FALSE
* KAL_TRUE is to treat this short string as call
*****************************************************************************/
kal_bool custom_short_string_as_call(kal_uint8 c1, kal_uint8 c2, kal_uint8 length)
{
kal_bool ret_val = KAL_FALSE;
//Implement specific short string parsing rule here
#if 0 // Example case :treat "86" as call
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif
return ret_val;
}
#if defined(__CUSTOMIZED_IDLE_STRING_AS_CALL__)
#define custom_is_digit(c) ((c >= '0') && (c <= '9'))
/*****************************************************************************
* FUNCTION
* custom_idle_string_as_call()
* DESCRIPTION
* This function is used to define specific string input in idle screen
* that should be treat as call instead of USSD.
* This check is prior to the spec 22.030 Figure 3.5.3.2
*
* PARAMETERS
* kal_uint8 *str
* kal_uint8 length
* RETURNS
* KAL_TRUE or KAL_FALSE
* KAL_TRUE is to treat this string as call
*****************************************************************************/
kal_bool custom_idle_string_as_call(kal_uint8 *str, kal_uint8 length)
{
kal_bool ret_val = KAL_FALSE;
//Implement specific string parsing rule here
if (((length == 1) && (str[0] == '0')) // "0 SEND"
|| ((length == 2) && ((kal_mem_cmp(str,"00",length) == 0) // "00 SEND"
|| (kal_mem_cmp(str,"*8",length) == 0) // "*8 SEND"
|| (kal_mem_cmp(str,"*0",length) == 0) // "*0 SEND"
|| (kal_mem_cmp(str,"#0",length) == 0))) // "#0 SEND"
|| ((length == 3) && ((kal_mem_cmp(str,"411",length) == 0) // "411 SEND"
|| (kal_mem_cmp(str,"*08",length) == 0) // "*08 SEND"
|| ((str[0] == '#')
&& (str[1] == '#')
&& custom_is_digit(str[2])))) // "##<1 digit> SEND"
|| ((length == 4) && ((str[0] == '*') || (str[0] == '#'))
&& custom_is_digit(str[1])
&& custom_is_digit(str[2])
&& custom_is_digit(str[3])) // "*<3 digits> SEND" or "#<3 digits> SEND"
|| ((length == 5) && (str[0] == '*')
&& custom_is_digit(str[1])
&& custom_is_digit(str[2])
&& custom_is_digit(str[3])
&& custom_is_digit(str[4])) // "*<4 digits> SEND"
|| ((length == 5) && (str[0] == '#')
&& custom_is_digit(str[1])
&& custom_is_digit(str[2])
&& custom_is_digit(str[3])
&& custom_is_digit(str[4])
&& custom_is_digit(str[5])) // "#<5 digits> SEND"
|| ((length == 9) && (str[0] == '*') && (str[1] == '*')
&& custom_is_digit(str[2])
&& custom_is_digit(str[3])
&& custom_is_digit(str[4])
&& custom_is_digit(str[5])
&& custom_is_digit(str[6])
&& custom_is_digit(str[7])
&& custom_is_digit(str[8])) // "**<7 digits> SEND"
)
{
ret_val = KAL_TRUE;
}
else
{
ret_val = KAL_FALSE;
}
return ret_val;
}
#endif /* defined(__CUSTOMIZED_IDLE_STRING_AS_CALL__) */
/*****************************************************************************
* FUNCTION
* custom_is_home_plmn()
* DESCRIPTION
* For AT+CREG and AT+CGREG network registeration report (defined in spec 27.007)
* +CREG : 1 (registered, home network)
* +CREG : 5 (registered, roaming)
* The basic rule for home plmn is to check if the PLMN id equal to mcc+mnc in IMSI
* However, there might be operators having more than one PLMN id
* For such case, you can define them in this function
*
* PARAMETERS
* kal_uint8* plmn
* kal_uint8* mcc_mnc
* kal_bool is_on_hplmn, for R7 EHPLMN
* RETURNS
* KAL_TRUE or KAL_FALSE
* KAL_TRUE is to treat this plmn as a home PLMN
*****************************************************************************/
kal_bool custom_is_home_plmn(kal_uint8* plmn, kal_uint8* mcc_mnc, kal_bool is_on_hplmn)
{
kal_bool custom_is_on_hplmn = KAL_FALSE;
//if SIM card MCC+MNC is 46000/46002/46007 , current PLMN is 46000/46002/46007. Treate as home PLMN. not roaming PLMN
if ((kal_mem_cmp(mcc_mnc,"46000",5) == 0) || (kal_mem_cmp(mcc_mnc,"46002",5) == 0) || (kal_mem_cmp(mcc_mnc,"46007",5) == 0))
{
if ((kal_mem_cmp(plmn,"46000",5) == 0) || (kal_mem_cmp(plmn,"46002",5) == 0) || (kal_mem_cmp(plmn,"46007",5) == 0))
{
custom_is_on_hplmn = KAL_TRUE;
}
}
if ((is_on_hplmn == KAL_TRUE) || (custom_is_on_hplmn == KAL_TRUE))
{
return KAL_TRUE;
}
else
{
return KAL_FALSE;
}
}
/***********************************************************************************************
* FUNCTION
* custom_disable_query_cfu_status()
* DESCRIPTION
* In CPHS spec , it define a file to record if Call Forwarding Uncoditional (CFU) is active.
* If CFU is active , ME show indicate user with CFU icon in MMI.
* However, not all the SIM card havs this CFU flag file.
* So one SIM card might be with CFU activaed in ME A,but fail to display CFU icon when it is inserted in the ME B.
*
* To dispaly CFU icon correctly,MTK solution might try to query CFU status right after first camping on to NW.
* However, this might cause user MO SS operation fail due to the collision of ss operation
*
* PARAMETERS
* none
* RETURNS
* KAL_FALSE (default) is to query CFU status for the first time camping on to NW
* KAL_TRUE is to disable the trick
*************************************************************************************************/
kal_uint8 custom_disable_query_cfu_status(void)
{
#if defined(__TC01__) || defined(__SS_CPHS_QUERY_CFU_DISABLE__)
return KAL_TRUE;
#else
return KAL_FALSE;
#endif
}
/***********************************************************************************************
* FUNCTION
* custom_cphs_query_cfu_status_always()
* DESCRIPTION
* In CPHS spec , it define a file to record if Call Forwarding Uncoditional (CFU) is active.
* If CFU is active , ME show indicate user with CFU icon in MMI.
* However, not all the SIM card havs this CFU flag file.
* So one SIM card might be with CFU activaed in ME A,but fail to display CFU icon when it is inserted in the ME B.
*
* To dispaly CFU icon correctly,MTK solution might try to query CFU status right after first camping on to NW always.
* However, this might cause user MO SS operation fail due to the collision of ss operation
* Available when custom_disable_query_cfu_status is KAL_FALSE.
*
* PARAMETERS
* none
* RETURNS
* KAL_FALSE (default) is to query CFU status when camping on to NW at the first time
* KAL_TRUE is to query CFU status when camping on to NW
*************************************************************************************************/
kal_uint8 custom_cphs_query_cfu_status_always(void)
{
#if defined(__SS_CPHS_QUERY_CFU_ALWAYS__)
return KAL_TRUE;
#else
return KAL_FALSE;
#endif
}
/***********************************************************************************************
* FUNCTION
* custom_allow_at_write_imei()
* DESCRIPTION
* To en/dis-able IMEI writing via AT command AT+EGMR with <op>=1 and <type>=7 or 10
*
* PARAMETERS
* none
* RETURNS
* KAL_FALSE is to prevent AT+EGMR to write IMEI
* KAL_TRUE (default) is to allow the functionality
*************************************************************************************************/
kal_uint8 custom_allow_at_write_imei(void)
{
return KAL_TRUE;
}
/***********************************************************************************************
* FUNCTION
* custom_sms_fdn_check_da_only()
* DESCRIPTION
* According to spec 22.101 A.25 ,
* For SMS,both SCA(Service Center address) and DA(Destination Address) shall be checked when FDN is enabled
* There might be special requirement for sms fdn check to check DA only.
*
* PARAMETERS
* none
* RETURNS
* KAL_TRUE is to ignore fdn check for sca, only check for da
* KAL_FALSE (default) is to obey the spec. Do fdn check for both sca and da
************************************************************************************************/
kal_uint8 custom_sms_fdn_check_da_only(void)
{
#ifdef __SMS_FDN_CHECK_DA_ONLY__
return KAL_TRUE;
#else
return KAL_FALSE;
#endif
}
/*****************************************************************************
* FUNCTION
* custom_ath_for_dialup_timer()
* DESCRIPTION
* This function is used to define time duration of handling ath for dialup
* The unit is 0.1 sec , Current default value is 40 sec (i.e. 400 x 0.1 sec)
* PARAMETERS
* none
* RETURNS
* time duration of handling ath for dialup
*****************************************************************************/
kal_uint16 custom_ath_for_dialup_timer(void)
{
#if defined(__SP_RIL_SUPPORT__)
return 0;
#else
return 400;
#endif
}
/*****************************************************************************
* FUNCTION
* l4_custom_battery_cind_value()
*
* DESCRIPTION
* This function is used to convert battery_voltage(battery_level_enum)
* to cind value 0~5 (battery cind range 0~5 is defined in HFP and 27.007 spec)
* battery cind_value is the response of AT+CIND or +CIEV:<battery_ind>,<cind_value>
*
* PARAMETERS
* battery_voltage IN
*
* RETURNS
* cind value (according to HFP and 27.007 spec, battery cind value is 0~5)
*****************************************************************************/
kal_uint8 l4_custom_battery_cind_value(kal_uint8 battery_voltage)
{
kal_uint8 cind_value;
/* convert battery_voltage(battery_level_enum) to spec defined cind value (0~5) */
if (battery_voltage > 5)
{
cind_value = 5;
}
else if (battery_voltage > 0)
{
cind_value = battery_voltage - 1;
}
else
{
cind_value = 0;
}
return cind_value;
}
/*****************************************************************************
* FUNCTION
* l4_custom_is_phb_valid_char
* DESCRIPTION
* This function is to check if the chars of the input str are valid or not
* PARAMETERS
* number [IN] string being checked
* RETURNS
* KAL_TRUE or KAL_FALSE
*****************************************************************************/
kal_bool l4_custom_is_phb_valid_char(kal_uint8 ch)
{
if ( !(ch >= '0' && ch <= '9' || ch == 'p' ||
ch == custom_wild_char() || ch == custom_auto_dtmf_modifier() ||
ch == '+' || ch == '*' || ch == '#') )
{
return KAL_FALSE;
}
return KAL_TRUE;
}
/*****************************************************************************
* FUNCTION
* custom_disable_modem_auto_startup()
* DESCRIPTION
*
* PARAMETERS
* none
* RETURNS
* TRUE: disable modem auto boot up. need AP side trigger
* FALSE: modem auto boot up/attach network
* cfun_state=1: auto boot up in normal mode
* cfun_state=4: auto boot up in flight mode
*****************************************************************************/
kal_bool custom_disable_modem_auto_startup(kal_uint8 *cfun_state)
{
*cfun_state = 1;
#if defined(__MODEM_CARD__) && defined(IC_MODULE_TEST)
return KAL_FALSE;
#endif
if (query_ps_conf_test_profile_setting() & FTA_MODEM_AUTO_BOOT_AND_AUTO_ANSWER_BIT_FOR_L4C)
{
return KAL_FALSE;
}
#if defined(__DISABLE_MODEM_AUTO_STARTUP__) || defined(__SMART_PHONE_MODEM__) || defined(__DUAL_TALK_MODEM_SUPPORT__)
return KAL_TRUE;
#else
#if defined(__MODEM_AUTO_STARTUP_TO_FLIGHT_MODE__)
*cfun_state = 4;
#endif
return KAL_FALSE;
#endif
}
/*****************************************************************************
* FUNCTION
* l4_custom_get_cscs_support_string()
*
* DESCRIPTION
* This function is used to get the supportted list of the AT+CSCS
*
* PARAMETERS
* none
*
* RETURNS
* supported list string of AT+CSCS
*****************************************************************************/
kal_char* l4_custom_get_cscs_support_string(void)
{
#ifdef __PHB_0x81_SUPPORT__
return "+CSCS: (\"IRA\", \"GSM\", \"HEX\", \"PCCP437\", \"8859-1\", \"UCS2\", \"UCS2_0X81\")";
#else
return "+CSCS: (\"IRA\", \"GSM\", \"HEX\", \"PCCP437\", \"8859-1\", \"UCS2\")";
#endif
}
/*****************************************************************************
* FUNCTION
* l4_custom_is_supportted_cscs()
*
* DESCRIPTION
* This function is used to check if the input name of cscs is support or not
* which let customer decide what cscs should be supportted
*
* PARAMETERS
* none
*
* RETURNS
* supported list string of AT+CSCS
*****************************************************************************/
kal_bool l4_custom_is_supportted_cscs(kal_char* string)
{
return KAL_TRUE;
}
/*****************************************************************************
* FUNCTION
* custom_disallow_gprs_dialup_when_ms_busy()
*
* DESCRIPTION
* This function is to configure "if we allow gprs dialup when MS is busy(in call)"
* in Bluetooth SPP port
* If return KAL_TRUE, we will response 'BUSY' for ATD*99# when MS busy (in call)
* If return KAL_FALSE, we allow ATD*99# to be processed when MS is in call
*
* For BQB DUN testcase APS/BV/02.
* It request MS to response 'BUSY' for GPRS dialup(ATD*99#) when MS is in call.
*
* PARAMETERS
* none
*
* RETURNS
* KAL_TRUE or KAL_FASLE
*****************************************************************************/
kal_bool custom_disallow_gprs_dialup_when_ms_busy(void)
{
return KAL_TRUE;
}
/*****************************************************************************
* FUNCTION
* custom_check_keypad_code
* DESCRIPTION
* This function is used to convert the input of AT command (ex. AT+CKPD)
* to the Device Key
* Customer can use this function to override the meaning of a key from AT command
* If customer didn't handle the key, we will check our default key mapping
*
* PARAMETERS
* key [IN] input keys from command
* keycode [OUT] a output device key which is converted from key
* RETURNS
* A pointer to the "key" which is unhandled
*****************************************************************************/
kal_uint8* custom_check_keypad_code(kal_uint8 *key, kal_uint8 *keycode)
{
/* EXAMPLE
if (*key == 'y' || *key=='Y')
{
*keycode = 57; // DEVICE_KEY_Y defined in the kbd_table.h
key++;
}
else if(*key == ':')
{
if(*(key+1) == 'j' || *(key+1) == 'J' )
{
*keycode = 42; // DEVICE_KEY_J defined in the kbd_table.h
key += 2;
}
}
*/
return key;
}
/*****************************************************************************
* FUNCTION
* custom_remove_cgsms_constraint()
*
* DESCRIPTION
* Regarding to AT+CGSMS = <service> to set service parameter to send SMS.
* We don't allow to set <service> = 0 (PS only).
* This is to prevent MO SMS fail due to no GPRS service available
* We only allow to set <service> if TEST SIM is inserted (for FTA test)
*
* If you want to remove such constraint, please modifty the function to return TRUE
* PARAMETERS
* none
*
* RETURNS
* KAL_TRUE or KAL_FASLE
*****************************************************************************/
kal_bool custom_remove_cgsms_constraint(void)
{
#if 0
#if defined(__CGSMS_FULL_SUPPORT__)
/* under construction !*/
#else
/* under construction !*/
#endif
#else
return KAL_TRUE;
#endif
}
/*****************************************************************************
* FUNCTION
* custom_get_supported_bands()
*
* DESCRIPTION
* get the supported bands of the protocol
*
* PARAMETERS
* gsm_bands returned gsm bands
* umts_bands returned umts bands
*
* RETURNS
* none
*****************************************************************************/
void custom_get_supported_bands(kal_uint32 *gsm_bands, kal_uint32 *umts_bands)
{
#if defined (__MTK_UL1_FDD__) && !defined (UL1_NOT_PRESENT) && defined(__MTK_TARGET__)
/* under construction !*/
#endif
*gsm_bands = 0
#if defined(__EGSM900__)
| 0x02 //BAND_900
#endif
#if defined(__DCS1800__)
| 0x08 //BAND_1800
#endif
#if defined(__GSM850__)
| 0x80 //BAND_850
#endif
#if defined(__PCS1900__)
| 0x10 //BAND_1900
#endif
;
*umts_bands = 0
#if defined(__UMTS_BAND_I__) || defined(__UMTS_TDD128_BAND_A__)
| 0x0001
#endif
#if defined(__UMTS_BAND_II__) || defined(__UMTS_TDD128_BAND_B__)
| 0x0002
#endif
#if defined(__UMTS_BAND_III__) || defined(__UMTS_TDD128_BAND_C__)
| 0x0004
#endif
#if defined(__UMTS_BAND_IV__) || defined(__UMTS_TDD128_BAND_D__)
| 0x0008
#endif
#if defined(__UMTS_BAND_V__) || defined(__UMTS_TDD128_BAND_E__)
| 0x0010
#endif
#if defined(__UMTS_BAND_VI__) || defined(__UMTS_TDD128_BAND_F__)
| 0x0020
#endif
#if defined(__UMTS_BAND_VII__)
| 0x0040
#endif
#if defined(__UMTS_BAND_VIII__)
| 0x0080
#endif
#if defined(__UMTS_BAND_IX__)
| 0x0100
#endif
#if defined(__UMTS_BAND_X__)
| 0x0200
#endif
;
#if defined (__MTK_UL1_FDD__)
#if !defined (UL1_NOT_PRESENT)
/* under construction !*/
#if defined(__MTK_TARGET__)
/* under construction !*/
/* under construction !*/
#endif
#endif
#endif
}
#ifdef __UMTS_RAT__
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#ifdef __UMTS_TDD128_MODE__
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif /* __UMTS_TDD128_MODE__ */
#endif /* __UMTS_RAT__ */
/*****************************************************************************
* FUNCTION
* custom_signal_strength_in_ts27007()
*
* DESCRIPTION
* convert a dbm value to level value defined in 27.007 +CSQ
*
* PARAMETERS
* kal_int32 strength_in_dbm, any strength value in dbm (Ex. RSCP, RSSI, EcN0...)
*
* RETURNS
* level value: ranged from 0 to 31, 99 means invalid/un-available
*****************************************************************************/
kal_uint8 custom_signal_strength_in_ts27007(kal_int32 strength_in_dbm)
{
kal_uint8 level = 99;
if (strength_in_dbm <= -113)
{
level = 0;
}
else if (strength_in_dbm >= -51)
{
level = 31;
}
else
{
level = (strength_in_dbm + 113) / 2;
}
return level;
}
/*****************************************************************************
* FUNCTION
* custom_signal_strength_raw_to_csq_level()
*
* DESCRIPTION
* convert 2G/3G signal strength raw data to level value defined in 27.007 +CSQ
*
* PARAMETERS
* kal_uint8 rat radio access technology (2G/3G)
* kal_int32 rssi_in_qdbm 2G/3G raw data
* kal_int32 RSCP_in_qdbm 3G raw data
* kal_int32 EcN0_in_qdbm 3G raw data
* kal_uint8 ber 2G/3G raw data
* kal_uint8 current_band 2G raw data
*
* RETURNS
* level value: ranged from 0 to 31, 99 means invalid/un-available
*****************************************************************************/
kal_uint8 custom_signal_strength_raw_to_csq_level(
kal_uint8 rat,
kal_int32 rssi_in_qdbm,
kal_int32 RSCP_in_qdbm,
kal_int32 EcN0_in_qdbm,
kal_uint8 ber,
kal_uint8 current_band) //rx_level
{
kal_int32 level = 99;
if (rat == 1)
{
/* 2G conversion */
if (rssi_in_qdbm != 1)
{
/* refer to 27.007 AT+CSQ */
level = custom_signal_strength_in_ts27007(rssi_in_qdbm / 4);
}
}
#ifdef __UMTS_RAT__
/* under construction !*/
/* under construction !*/
#ifdef __UMTS_TDD128_MODE__ /* 3G TDD conversion */
#if defined(__OP01__) && defined(__MMI_FMI__) //MAUI_02973870, ALPS00056754, mtk02285
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#if 0
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif
/* under construction !*/
#else /* Not-- defined(__OP01__) && defined(__MMI_FMI__) */
/* under construction !*/
#if 0
/* under construction !*/
/* under construction !*/
#else
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif
/* under construction !*/
#endif /* defined(__OP01__) && defined(__MMI_FMI__) */
/* under construction !*/
#else /* 3G FDD conversion */
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif /* __UMTS_TDD128_MODE__ */
/* under construction !*/
#endif /* __UMTS_RAT__ */
return (kal_uint8) level;
}
/*****************************************************************************
* FUNCTION
* custom_signal_strength_raw_to_ciev_signal_level()
*
* DESCRIPTION
* convert signal strength raw data to level <val> in +CIEV:<signal>,<val>
*
* PARAMETERS
* kal_uint8 rat radio access technology (2G/3G)
* kal_int32 rssi_in_qdbm RSSI raw data
* kal_int32 RSCP_in_qdbm 3G raw data
* kal_int32 EcN0_in_qdbm 3G raw data
* kal_uint8 ber 2G/3G raw data
* kal_uint8 current_band 2G raw data
*
* RETURNS
* level value: ranges from 0 to 5
*****************************************************************************/
kal_uint8 custom_signal_strength_raw_to_ciev_signal_level(
kal_uint8 rat,
kal_int32 rssi_in_qdbm,
kal_int32 RSCP_in_qdbm,
kal_int32 EcN0_in_qdbm,
kal_uint8 ber,
kal_uint8 current_band) //hong_rx_level
{
kal_uint8 rx_level = 0;
kal_uint8 signal_ind;
#if defined(__OP01__) && defined(__UMTS_TDD128_MODE__) && defined(__MMI_FMI__) //MAUI_02973870, ALPS00056754, mtk02285
/* CMCC TD requirement */
if (rat == 1)
{
if (rssi_in_qdbm == 1)
{
rx_level = 99;
}
else
{
rx_level = custom_signal_strength_in_ts27007(rssi_in_qdbm / 4);
}
}
else
{
rx_level = custom_signal_strength_in_ts27007(RSCP_in_qdbm / 4);
}
#else
rx_level = custom_signal_strength_raw_to_csq_level(rat, rssi_in_qdbm, RSCP_in_qdbm, EcN0_in_qdbm, ber, current_band);
#endif /* defined(__OP01__) && defined(__UMTS_TDD128_MODE__) && defined(__MMI_FMI__) */
if (rx_level == 0 || rx_level == 99)
{
signal_ind = 0;
}
else if (rx_level < 6)
{
signal_ind = 1;
}
else if ((rx_level >= 6) && (rx_level < 12))
{
signal_ind = 2;
}
else if ((rx_level >= 12) && (rx_level < 18))
{
signal_ind = 3;
}
else if ((rx_level >= 18) && (rx_level < 24))
{
signal_ind = 4;
}
else if (rx_level >= 24)
{
signal_ind = 5;
}
else
{
signal_ind = 0;
}
return signal_ind;
}
/*****************************************************************************
* FUNCTION
* custom_ciev_signal_variance()
*
* DESCRIPTION
* This function is used to set the ignorable difference between two consequent
* +CIEV Signal Strength URC for Bluetoth Hands-Free.
*
* PARAMETERS
* none
*
* RETURNS
* A kal_uint8 value 0 ~ 5 indicating the ignorable difference bwtween two <val>
* in +CIEV:<signal>,<val>. If the return is larger than 0, the <val> different
* to the last reported +CIEV Signal Strength <val> which is smaller then the
* return would be ignored.
* If the return value is 0, the +CIEV Signal Strength URC is reported as usual
*****************************************************************************/
kal_uint8 custom_ciev_signal_variance(void)
{
/* The default return value is 0 which means no filter.
If return value is 5, the +CIEV:<signal>,<val> is turn off
*/
return 0;
}
/*****************************************************************************
* FUNCTION
* custom_disable_gprs_csd_dialup()
*
* DESCRIPTION
* This function is used to disable GPRS and CSD dial up functionality
*
* PARAMETERS
* none
*
* RETURNS
* KAL_TRUE is to disable gprs and csd dialup
* KAL_FALSE has no effect on these functionality (default)
*****************************************************************************/
kal_bool custom_disable_gprs_csd_dialup(void) //MAUI_02600165
{
return KAL_FALSE;
}
#if defined(__ATCMD_ONOFF_CHECK__)
/*****************************************************************************
* FUNCTION
* custom_check_is_atcmd_allowed()
*
* DESCRIPTION
* check if the command is allowed by custom or not
*
* PARAMETERS
* cmd_id [IN] AT command enum defined in the ps\l4\atci\include\at_cmd.def
*
* RETURNS
* KAL_TRUE: could be executed,
* KAL_FLASE: could not be executed
*****************************************************************************/
kal_bool custom_check_is_atcmd_allowed(rmmi_cmd_id_enum cmd_id)
{
/* the following example disallowed executing
* the command AT+EADP
*/
/*if (cmd_id == RMMI_CMD_ATEADP)
{
return KAL_FALSE;
}*/
return KAL_TRUE;
}
#endif
#ifdef __MOD_TCM__
/*****************************************************************************
* FUNCTION
* custom_l4c_gprs_when_needed_timer()
*
* DESCRIPTION
* This function is used to define GPRS when needed timer value
* The unit is 100ms. Ex. 20 => 20 * 100ms => 2 seconds
* Default value = 20 (2 seconds)
* Maximum value = 255 (Due to kal_uint8 limit, the max is about 25.5 sec)
* PARAMETERS
* none
*****************************************************************************/
kal_uint8 custom_l4c_gprs_when_needed_timer(void)
{
const kal_uint8 GPRS_DETACH_TIMER = 20;
return GPRS_DETACH_TIMER;
} // MAUI_02598495, custom gprs detach timer
#if defined(__NDIS_FDN_ENABLE__) && defined(__NDIS_SUPPORT__)
/*****************************************************************************
* FUNCTION
* custom_l4c_ndis_fdn_enable()
*
* DESCRIPTION
* This function is used to enable/disable FDN check before NDIS setup
* 0. the FDN check number is "*99#"
* 1. if it returns KAL_TRUE, then L4C checks PHB approve result to decide doing PDP activation or not,
* - if PHB approve fails, then it does NOT send out PDP activation request
* - if PHB approve succeeds, then it sends out PDP activation request
*
* 2. if it returns KAL_FALSE, the L4C always SKIPS PHB approve result and always send out PDP activation request
* PARAMETERS
* none
*****************************************************************************/
kal_bool custom_l4c_ndis_fdn_enable(void)
{
#if 1
return KAL_TRUE; //check FDN
#else
/* under construction !*/
#endif
}
#endif /* defined(__NDIS_FDN_ENABLE__) && defined(__NDIS_SUPPORT__) */
#endif /* __MOD_TCM__ */
/*****************************************************************************
* FUNCTION
* custom_l4c_max_poweroff_retry()
*
* DESCRIPTION
* This function is used to define maximal waitting time for SIM power off while MS is going to shutdown
* The unit is second. Ex. 2 => 2 seconds
* Default value = 8 (seconds)
* Maximum value = 255 (Due to kal_uint8 limit, the max is about 255 sec)
* PARAMETERS
* none
*****************************************************************************/
kal_uint8 custom_l4c_max_poweroff_retry(void)
{
return 8;
}
#ifdef __SAT__
/*****************************************************************************
* FUNCTION
* custom_l4c_sat_ton_npi_transform()
*
* DESCRIPTION
* This function is used to transform the TON/NPI of SAT send SS from SIM
*
* PARAMETERS
* raw_data [IN] raw data from SIM
*
* RETURNS
* the new data transformed from raw_data
*****************************************************************************/
kal_uint8 custom_l4c_sat_ton_npi_transform(kal_uint8 raw_data)
{
kal_uint8 ret_val = 0x81;
/* MAUI_02660770: return 0x91 if raw_data is between 0x90 to 0x9f;
* Otherwise return 0x81
*/
if ((raw_data >= 0x90) && (raw_data <= 0x9f))
{
ret_val = 0x91;
}
return ret_val;
}
#endif /* __SAT__ */
#ifdef __AMR_WB_WHITE_LIST__
/*****************************************************************************
* FUNCTION
* custom_check_white_list
* DESCRIPTION
* This function is for customize PLMN in the wihte list, on which CC support AMR_WB
*
* PARAMETERS
*
* RETURNS
*
* GLOBALS AFFECTED
* None
*****************************************************************************/
void custom_check_white_list(kal_bool * is_gsm_white_list,kal_bool * is_umts_white_list,kal_uint32 plmn_id)
{
#ifdef __AMR_WB_FOR_T_MOBILE__
/* *is_gsm_white_list =KAL_TRUE; means that MS support AMR_WB in 2G rat of the selected PLMN*/
/*check 2G white_list plmn [byte2:mcc1,mcc2; byte1:mcc3,mnc1; byte0:mnc2,mnc3]*/
switch(plmn_id)
{
/*Please add white plmn list as specified below:
case 0x0046000f:
case 0x0046002f:
*is_gsm_white_list =KAL_TRUE;
break;
*/
default:
*is_gsm_white_list =KAL_FALSE;
break;
}
#else
#ifdef __AMR_GSM_IOT_SUPPORT__
*is_gsm_white_list =KAL_TRUE;
#else
*is_gsm_white_list =KAL_FALSE;
#endif
#endif
#ifdef __OP11__
/* *is_umts_white_list =KAL_TRUE; means that MS support AMR_WB in 3G rat of the selected PLMN*/
/*check UMTS white_list plmn [byte2:mcc1,mcc2; byte1:mcc3,mnc1; byte0:mnc2,mnc3]*/
switch(plmn_id)
{
/*Please add white plmn list as specified below:
case 0x0046000f:
case 0x0046002f:
*is_umts_white_list =KAL_TRUE;
break;
*/
default:
*is_umts_white_list =KAL_FALSE;
break;
}
#else
*is_umts_white_list =KAL_TRUE;
#endif
return ;
}
#endif
/*****************************************************************************
* FUNCTION
* cm_p_w_switch
* DESCRIPTION
* This function is used to define if "P"(pause) and "W"(wait for user command)
* of DTMF separator is switched or not
*
* PARAMETERS
*
* RETURNS
* kal_uint8
* GLOBALS AFFECTED
* None
*****************************************************************************/
kal_bool cm_dtmf_p_w_switch (void)
{
return (CM_DTMF_P_W_SWITCH_FLAG);
}
#ifdef __FWP_NC_LAI_INFO__
/*****************************************************************************
* FUNCTION
* cm_get_cell_lock_string
* DESCRIPTION
* This function is used to let customer configure cell lock prefix and also
* change prefix length, CELL_LOCK_PREFIX_LEN
*
* PARAMETERS
*
* RETURNS
* kal_uint8
* GLOBALS AFFECTED
* None
*****************************************************************************/
kal_uint8 cm_get_cell_lock_string (kal_uint8** prefix)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
*prefix = &CELL_LOCK_PREFIX[0];
return CELL_LOCK_PREFIX_LEN;
}
#endif /*__FWP_NC_LAI_INFO__*/
/*****************************************************************************
* FUNCTION
* customer_define_codec_priority
* DESCRIPTION
* This function is used to define the priority customer prefered
*
* PARAMETERS
*
* RETURNS
* kal_uint8
* GLOBALS AFFECTED
* None
*****************************************************************************/
const kal_uint8 customer_define_codec_priority[SUPPORTED_2G_CODEC_NUM]=
{
#ifdef __CUSTOM_CODEC_PRIORITY__
CSMCC_FR_AMRWB_V5,CSMCC_FR_V3,CSMCC_HR_V3,CSMCC_FR_V2,CSMCC_FR_V1,CSMCC_HR_V1
#else
CSMCC_FR_AMRWB_V5,CSMCC_FR_V3,CSMCC_FR_V2,CSMCC_FR_V1,CSMCC_HR_V3,CSMCC_HR_V1
#endif
};
/*****************************************************************************
* FUNCTION
* cc_get_SUPPORTED_2G_CODEC_NUM
* DESCRIPTION
* This function is used to get the MAX Codec size customer defined
*
* PARAMETERS
*
* RETURNS
* kal_uint8
* GLOBALS AFFECTED
* None
*****************************************************************************/
kal_uint8 cc_get_SUPPORTED_2G_CODEC_NUM(void)
{
return(SUPPORTED_2G_CODEC_NUM);
}
#ifdef __CUSTOM_CONFIG_ACM_BOUND__
/*****************************************************************************
* FUNCTION
* custom_is_acm_exceed_boundary
* DESCRIPTION
* This function is used to check if acm exceed the boundary.
*
* PARAMETERS
*
* RETURNS
* kal_uint8
* GLOBALS AFFECTED
* None
*****************************************************************************/
kal_bool custom_is_acm_exceed_boundary (kal_uint32 acm_value)
{
return ((kal_bool)(acm_value > CUSTOM_ACM_BOUND));
}
#endif /*__CUSTOM_CONFIG_ACM_BOUND__*/
/* MAUI_01637672 support CCWE */
/*****************************************************************************
* FUNCTION
* custom_cc_get_acm_bound
* DESCRIPTION
* This function is used to get the acm custom bound.
*
* PARAMETERS
*
* RETURNS
* kal_uint32
* GLOBALS AFFECTED
* None
*****************************************************************************/
kal_uint32 custom_cc_get_acm_bound()
{
return ((kal_uint32)CUSTOM_ACM_BOUND);
}
/*****************************************************************************
* FUNCTION
* custom_cc_get_acm_ccwe_time
* DESCRIPTION
* This function is used to get the acm ccwe time.
*
* PARAMETERS
*
* RETURNS
* kal_uint32
* GLOBALS AFFECTED
* None
*****************************************************************************/
kal_uint32 custom_cc_get_acm_ccwe_time()
{
return ((kal_uint32)CUSTOM_ACM_CALL_METER_WARNING_EVENT_SECONDS);
}
/*****************************************************************************
* FUNCTION
* custom_config_rlc_timer
* DESCRIPTION
* This function is used to get customer config rlc timer in seconds.
*
* PARAMETERS
*
* RETURNS
* kal_uint32
* GLOBALS AFFECTED
* None
*****************************************************************************/
kal_uint32 custom_config_rlc_timer()
{
return CSM_RLC_TIMER_CONFIG;
}
/*****************************************************************************
* FUNCTION
* custom_get_at_audio_download_folder
* DESCRIPTION
*
* PARAMETERS
* void
* RETURNS
*
*****************************************************************************/
kal_wchar *custom_get_at_audio_download_folder()
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
return CUSTOM_AT_AUDIO_DOWNLOAD_FOLDER_NAME;
}
/*****************************************************************************
* FUNCTION
* custom_get_at_image_download_folder
* DESCRIPTION
*
* PARAMETERS
* void
* RETURNS
*
*****************************************************************************/
kal_wchar *custom_get_at_image_download_folder()
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
return CUSTOM_AT_IMAGE_DOWNLOAD_FOLDER_NAME;
}
#if defined(__GEMINI__) && defined(__SIM_ME_LOCK__)
/*****************************************************************************
* FUNCTION
* custom_l4c_root_lock_verify()
*
* DESCRIPTION
* This function is used to customiz link_SML. Each SIM ME Lock can depend
* on the status of other SIM. Please modify pending_password_tbl and
* need_unlock_table according to the updated_sim and updated_type.
*
* PARAMETERS
* updated_sim [IN] the updated SIM
* updated_type [IN] the pending password of the updated SIM
* pending_password_tbl [IN/OUT] the fake pending password table
* need_unlock_table [OUT] the flag of each modified SIM
*
* RETURNS
* whether the pending password of any SIM is change
*****************************************************************************/
kal_bool custom_l4c_root_lock_verify(kal_uint8 updated_sim,
smu_pending_password_id_enum updated_type,
smu_pending_password_id_enum *pending_password_tbl,
kal_uint8 *need_unlock_table)
{
kal_bool need_unlock = KAL_FALSE;
#if defined(__TC01__) || defined(__LINK_SML__)
switch (updated_type)
{
case ID_READY:
{
if (updated_sim == SIM1)
{
kal_uint8 i;
/* unlock all SIM if SIM1 is valid */
for (i=1; i<MAX_SIM_NUM; i++)
{
if ((pending_password_tbl[i] == ID_PH_FSIM_PIN) ||
(pending_password_tbl[i] == ID_PH_NET_PIN) ||
(pending_password_tbl[i] == ID_PH_NETSUB_PIN) ||
(pending_password_tbl[i] == ID_PH_SP_PIN) ||
(pending_password_tbl[i] == ID_PH_CORP_PIN) ||
(pending_password_tbl[i] == ID_PH_LINK_NS_SP_PIN) ||
(pending_password_tbl[i] == ID_PH_LINK_SIM_C_PIN))
{
pending_password_tbl[i] = ID_READY;
need_unlock_table[i] = 1;
need_unlock = KAL_TRUE;
}
}
}
pending_password_tbl[updated_sim] = updated_type;
break;
}
case ID_PH_FSIM_PIN:
case ID_PH_NET_PIN:
case ID_PH_NETSUB_PIN:
case ID_PH_SP_PIN:
case ID_PH_CORP_PIN:
case ID_PH_LINK_NS_SP_PIN:
case ID_PH_LINK_SIM_C_PIN:
{
/* SIM2~SIM3 SML locked but SIM1 is valid */
if (updated_sim != SIM1)
{
if (pending_password_tbl[SIM1] == ID_READY)
{
pending_password_tbl[updated_sim] = ID_READY;
need_unlock = KAL_TRUE;
need_unlock_table[updated_sim] = 1;
}
else if (pending_password_tbl[SIM1] == ID_SIM_BUSY)
{
//don't lock first, wait for sim1 result
pending_password_tbl[updated_sim] = ID_SIM_BUSY;
}
else
{
pending_password_tbl[updated_sim] = updated_type;
}
}
else //SIM1 locked
{
pending_password_tbl[updated_sim] = updated_type;
}
break;
}
default:
/* not change */
pending_password_tbl[updated_sim] = updated_type;
break;
}
#else /* __TC01__ || __LINK_SML__ */
/* default each SML is independent */
pending_password_tbl[updated_sim] = updated_type;
#endif
return need_unlock;
}
#endif /* defined(__GEMINI__) && defined(__SIM_ME_LOCK__) */
/*****************************************************************************
* FUNCTION
* custom_atci_multiple_uart_ports()
*
* DESCRIPTION
* This function is used to open additional UART/USB/etc. ports except PS_UART_PORT
* Note, the maximum number of ports could not exceed value : MAX_ATCI_EXTRA_CHANNEL
* PARAMETERS
* kal_uint8, number of additional ports
*****************************************************************************/
kal_uint8 custom_atci_multiple_uart_ports(UART_PORT *ports, UART_baudrate *baudrates)
{
#ifdef __ATCI_MULTI_UART_PORT_SUPPORT__
UART_PORT port_setting[MAX_ATCI_EXTRA_CHANNEL] = {uart_port_usb};
UART_baudrate baudrates_setting[MAX_ATCI_EXTRA_CHANNEL] = {115200};
kal_uint8 i;
for (i=0; i<MAX_ATCI_EXTRA_CHANNEL; i++)
{
ports[i] = port_setting[i];
baudrates[i] = baudrates_setting[i];
}
return MAX_ATCI_EXTRA_CHANNEL;
#else
return 0;
#endif
}