blob: ad08a84bbe65d66d4532862400ba64168af574cb [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001/*****************************************************************************
2* Copyright Statement:
3* --------------------
4* This software is protected by Copyright and the information contained
5* herein is confidential. The software may not be copied and the information
6* contained herein may not be used or disclosed except with the written
7* permission of MediaTek Inc. (C) 2005
8*
9* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
10* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
11* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
12* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
13* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
14* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
15* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
16* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
17* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
18* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
19* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
20* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
21*
22* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
23* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
24* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
25* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
26* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
27*
28* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
29* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
30* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
31* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
32* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
33*
34*****************************************************************************/
35/*****************************************************************************
36 *
37 * Filename:
38 * ---------
39 * nvram_compress.c
40 *
41 * Project:
42 * --------
43 * MAUI
44 *
45 * Description:
46 * ------------
47 * compress nvram default value.
48 *
49 * Author:
50 * -------
51 * -------
52 *
53 *============================================================================
54 * HISTORY
55 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
56 *------------------------------------------------------------------------------
57 * removed!
58 *
59 * removed!
60 * removed!
61 * removed!
62 * removed!
63 *
64 * removed!
65 * removed!
66 *
67 * removed!
68 * removed!
69 * removed!
70 *
71 * removed!
72 * removed!
73 * removed!
74 *
75 * removed!
76 * removed!
77 * removed!
78 *
79 * removed!
80 * removed!
81 * removed!
82 *
83 * removed!
84 * removed!
85 * removed!
86 *
87 * removed!
88 * removed!
89 * removed!
90 *
91 * removed!
92 * removed!
93 * removed!
94 *
95 * removed!
96 * removed!
97 * removed!
98 *
99 * removed!
100 * removed!
101 * removed!
102 *
103 * removed!
104 * removed!
105 * removed!
106 *
107 * removed!
108 * removed!
109 * removed!
110 *
111 * removed!
112 * removed!
113 * removed!
114 *
115 * removed!
116 * removed!
117 * removed!
118 *
119 * removed!
120 * removed!
121 * removed!
122 *
123 * removed!
124 * removed!
125 * removed!
126 *
127 * removed!
128 * removed!
129 * removed!
130 *
131 * removed!
132 * removed!
133 * removed!
134 *
135 * removed!
136 * removed!
137 * removed!
138 *
139 *
140 *------------------------------------------------------------------------------
141 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
142 *============================================================================
143 ****************************************************************************/
144
145#include <string.h>
146#include <stdio.h>
147#include <stdarg.h>
148#include <stdlib.h>
149#include <io.h>
150
151#ifdef __NVRAM_COMPRESS_SUPPORT__
152/*****************************************************************************
153 * Header file
154 *****************************************************************************/
155#include "nvram_auto_gen.h"
156
157#include "zlib.h"
158
159#if defined(__MMI_FMI__)
160#include "custom_mmi_default_value.h"
161#include "nvram_user_defs.h"
162#endif
163
164/*****************************************************************************
165 * Typedef
166 *****************************************************************************/
167#define RESULT_HEADER_PATH "..\\..\\..\\custom\\common\\pluto_mmi\\nvram_default_value.h"
168#define RESULT_SRC_PATH "..\\..\\..\\custom\\common\\pluto_mmi\\nvram_default_value.c"
169#define CUSTPACK_PATH "..\\..\\..\\custom\\common\\pluto_mmi\\nvram_cust_pack_default_value.c"
170#define COMPRESS_REPORT_FILE "..\\..\\..\\~nvram_compress.txt"
171
172#define CUSTPACK_FILE_INCLUDE "\n#include \"kal_release.h\"\n#include \"nvram_defs.h\"\n"
173
174#define FILE_HEADER "\/* \nThis file is generated by nvram auto gen, all modification will be lost, \n Author: Wen Wu(MTK80153)\n *\/"
175#define FILE_INCLUDE "\n#include \"kal_general_types.h\"\n"
176#define FILE_COMPILE_OPTION_START "\n#ifdef __NVRAM_COMPRESS_SUPPORT__\n"
177#define FILE_COMPILE_OPTION_END "\n#endif\n\n"
178#define CUSTPACK_FILE_COMPILE_OPTION_START "\n#ifdef NVRAM_INTERNAL_USE\n#ifdef __NVRAM_COMPRESS_SUPPORT__\n"
179#define CUSTPACK_FILE_COMPILE_OPTION_END "\n#endif\n#endif\n\n"
180
181#define VALUE_MACRO_START "\n#ifndef __NVRAM_DEFAULT_VALUE_H__\n#define __NVRAM_DEFAULT_VALUE_H__\n"
182#define VALUE_MACRO_END "\n#endif\n\n"
183
184#define VALUE_START "\nconst kal_uint8 %s_ZIP[%d] =\n"
185#define VALUE_BRACE "{"
186#define VALUE_END "\n};\n"
187
188#define VALUE_EXTERN "\nextern const kal_uint8 %s_ZIP[];\n"
189#define VALUE_REDEFINE "\n#define %s_ZIP %s\n"
190#define VAR_TABLE_ENTRY "\t{%s,%d,%d},\n"
191
192#define VALUE_MAX_SIZE "\n#define NVRAM_MAX_DEFAULE_VALUE_SIZE %d\n"
193
194#define BUFFER_FOR_LEN 4
195
196/* High trace will exist current env */
197#define NVRAM_TRC_HIGH(x) { printf(x); exit(3);}
198#define NVRAM_TRC_HIGH1(x,y) { printf(x,y); exit(3);}
199#define NVRAM_TRC_LOW(x) { printf(x);}
200#define NVRAM_TRC_LOW1(xx, x) { printf(xx,x);}
201#define NVRAM_TRC_LOW2(xx, x, y) { printf(xx, x, y);}
202
203#define RETURN_IF_FAIL(p) if(!(p)){printf("NVRAM abormal return at line %d\n", __LINE__);return;}
204#define RETURN_VAL_IF_FAIL(p, ret) if(!(p)){ printf("NVRAM return fail at line %d\n", __LINE__); return (ret);}
205
206#define NVRAM_MALLOC(size) malloc(size)
207#define NVRAM_MFREE(p) if(!p) {free(p); p = NULL;}
208
209#define NVRAM_MEM_FACTOR1 10
210#define NVRAM_MEM_FACTOR2 50
211
212#define NVRAM_TEMP_BUFFER_SIZE 512
213#define NVRAM_ZLIB_BUFF_SIZE (80*1024)
214
215/*
216 * conv between unsigned char to unsigned int
217 */
218#define CONV_4BYTES_TO_INT(b, i) (i = ((b[0] << 24) + (b[1] << 16) + (b[2] << 8) + b[3]))
219#define CONV_INT_TO_4BYTES(b, i) \
220 b[0] = (kal_uint8)(i >> 24); \
221 b[1] = (kal_uint8)(i >> 16); \
222 b[2] = (kal_uint8)(i >> 8); \
223 b[3] = (kal_uint8)i;
224
225
226/*****************************************************************************
227 * define
228 *****************************************************************************/
229typedef enum{
230 RET_OK,
231 RET_STOP,
232 RET_OOM,
233 RET_TOTAL
234}Ret;
235
236typedef kal_int32 (*compress_funcptr)(kal_uint8 *dest, kal_uint32 *destLen,const kal_uint8 *source, kal_uint32 sourceLen, kal_int32 level);
237typedef kal_int32 (*uncompress_funcptr)(kal_uint8 *dest, kal_uint32 *destLen, const kal_uint8 *source, kal_uint32 sourceLen);
238typedef Ret (*visit_funcptr)(void *data, void* usr_data);
239
240
241typedef struct _NvramCompress
242{
243 compress_funcptr onCompress;
244 uncompress_funcptr onUncompress;
245 kal_uint32 count;
246 kal_uint32 org_total_size;
247 kal_uint32 compress_total_size;
248 kal_uint32 max_default_value;
249 kal_uint32 last_custpack;
250 kal_uint32 custpack_index;
251 kal_uint32 custpack_total;
252 FILE *result_src_fp;
253 FILE *custpack_fp;
254 FILE *result_header_fp;
255 FILE *report_fp;
256}NvramCompress;
257
258/*****************************************************************************
259 * Global variable
260 *****************************************************************************/
261
262/*****************************************************************************
263 * Local variable
264 *****************************************************************************/
265static NvramCompress g_nvram_compress_cntx;
266
267/*****************************************************************************
268 * Local Function
269 *****************************************************************************/
270
271/*****************************************************************************
272 * Global Function
273 *****************************************************************************/
274
275/*****************************************************************************
276* FUNCTION
277* nvram_for_each
278* DESCRIPTION
279* scan all the lid of the table
280* PARAMETERS
281* table [IN] the logical table
282* visit [IN] vist function pointer
283* usr_data [IN] user data
284* RETURNS
285* void
286*****************************************************************************/
287static void nvram_for_each(const ltable_entry_struct *table, visit_funcptr visit, void *usr_data)
288{
289 /*----------------------------------------------------------------*/
290 /* Local Variables */
291 /*----------------------------------------------------------------*/
292 nvram_lid_enum i = 0;
293
294 /*----------------------------------------------------------------*/
295 /* Code Body */
296 /*----------------------------------------------------------------*/
297 RETURN_IF_FAIL(table != NULL && visit != NULL);
298
299 while (table[i].LID != NVRAM_EF_RESERVED_LID &&
300 table[i].LID < NVRAM_EF_LAST_LID_CUST)
301 {
302 if (visit(&table[i], usr_data) == RET_STOP)
303 {
304 break;
305 }
306 i++;
307 }
308
309}
310
311/*****************************************************************************
312* FUNCTION
313* nvram_compress_mem_dump
314* DESCRIPTION
315* Dump memory
316* PARAMETERS
317* None
318* RETURNS
319* None
320*****************************************************************************/
321static void nvram_compress_mem_dump(kal_uint8 *str1, kal_uint8 *buffer, kal_uint32 size, FILE* fp)
322{
323 /*----------------------------------------------------------------*/
324 /* Local Variables */
325 /*----------------------------------------------------------------*/
326 kal_uint32 i;
327
328 /*----------------------------------------------------------------*/
329 /* Code Body */
330 /*----------------------------------------------------------------*/
331 fprintf(fp, "\nMemoryDump:");
332 fprintf(fp, "%s:{",str1);
333
334 for(i = 0; i < size; i++)
335 {
336 if ((i % 20 == 0))
337 {
338 fprintf(fp, "\n\t");
339 }
340
341 fprintf(fp, "%2x,", buffer[i]);
342 }
343 fprintf(fp, "}\n");
344 fflush(fp);
345}
346
347/*****************************************************************************
348* FUNCTION
349* nvram_check_compress
350* DESCRIPTION
351* To check whether the entry can be compressed
352* PARAMETERS
353* entry [IN] the logical table
354* RETURNS
355* kal_bool
356*****************************************************************************/
357static kal_bool nvram_check_compress(const ltable_entry_struct *entry)
358{
359 /*----------------------------------------------------------------*/
360 /* Local Variables */
361 /*----------------------------------------------------------------*/
362
363 /*----------------------------------------------------------------*/
364 /* Code Body */
365 /*----------------------------------------------------------------*/
366 RETURN_VAL_IF_FAIL(entry != NULL, KAL_FALSE);
367
368 /* No data */
369 if (entry == NULL ||
370 entry->LID == 0 ||
371 entry->size == 0 ||
372 entry->total_records == 0)
373 {
374 return KAL_FALSE;
375 }
376
377 /* Some default value can't be compressed */
378 if (strstr(entry->str_default_value, "NVRAM_EF_ZERO_DEFAULT") != NULL ||
379 strstr(entry->str_default_value, "NVRAM_EF_FF_DEFAULT") != NULL)
380 {
381 return KAL_FALSE;
382 }
383
384 return KAL_TRUE;
385}
386
387/*****************************************************************************
388* FUNCTION
389* nvram_compress_custpack_callback
390* DESCRIPTION
391* Compress the custpack entry
392* PARAMETERS
393* data [IN]data item
394* usr_data [IN]user data
395* RETURNS
396* Ret
397*****************************************************************************/
398static Ret nvram_compress_custpack_callback(void *data, void* usr_data)
399{
400 /*----------------------------------------------------------------*/
401 /* Local Variables */
402 /*----------------------------------------------------------------*/
403 ltable_entry_struct *entry;
404 kal_uint32 size, value_size;
405 kal_int32 ret;
406
407 /*----------------------------------------------------------------*/
408 /* Code Body */
409 /*----------------------------------------------------------------*/
410 RETURN_VAL_IF_FAIL(data != NULL && usr_data != NULL, RET_STOP);
411
412 entry = (ltable_entry_struct *)data;
413
414 /*
415 * Only care about custpack entry in this callback
416 */
417 if (NVRAM_IS_CATEGORY_CUSTPACK(entry->category))
418 {
419 nvram_compress_callback(entry, usr_data);
420 }
421
422 return RET_OK;
423}
424
425
426
427/*****************************************************************************
428* FUNCTION
429* nvram_compress_callback
430* DESCRIPTION
431* Compress the entry
432* PARAMETERS
433* data [IN]data item
434* usr_data [IN]user data
435* RETURNS
436* Ret
437*****************************************************************************/
438static Ret nvram_compress_callback(void *data, void* usr_data)
439{
440 /*----------------------------------------------------------------*/
441 /* Local Variables */
442 /*----------------------------------------------------------------*/
443 ltable_entry_struct *entry;
444 kal_uint32 size, value_size, i;
445 kal_uint32 *compress_size;
446 kal_int32 ret;
447 kal_uint8 *dest = NULL, *data_ptr, *str, *default_value;
448 NvramCompress *thiz;
449 FILE* fp;
450
451 /*----------------------------------------------------------------*/
452 /* Code Body */
453 /*----------------------------------------------------------------*/
454 RETURN_VAL_IF_FAIL(data != NULL && usr_data != NULL, RET_STOP);
455
456 thiz = (NvramCompress *)usr_data;
457 entry = (ltable_entry_struct *)data;
458
459 if (!nvram_check_compress(entry))
460 {
461 return RET_OK;
462 }
463
464 /* Port default value to nvram_default_value.c */
465 str = nvram_compress_locate_default_value(entry->str_default_value);
466 if (str == NULL)
467 {
468 NVRAM_TRC_HIGH1("No default value! %d", entry->LID);
469 return RET_OK;
470 }
471
472 /* we only compress the data in internal category */
473 if (NVRAM_IS_CATEGORY_INTERNAL(entry->category) ||
474 NVRAM_IS_CATEGORY_CALIBRAT(entry->category) ||
475 NVRAM_IS_CATEGORY_IMPORTANT(entry->category) ||
476 NVRAM_IS_CATEGORY_SECUPACK(entry->category))
477 {
478 fprintf(thiz->result_header_fp, VALUE_REDEFINE, str, str);
479 return RET_OK;
480 }
481
482
483 if (NVRAM_IS_ATTR_NOT_ZIP_DEFAULT(entry->attr))
484 {
485 if (NVRAM_IS_CATEGORY_CUSTPACK(entry->category))
486 {
487 NVRAM_TRC_HIGH1("Custpack with not compress attribute %d!\n", entry->LID);
488 }
489
490 fprintf(thiz->result_header_fp, VALUE_REDEFINE, str, str);
491 return RET_OK;
492 }
493
494 if (NVRAM_IS_ATTR_MULTI_DEFAULT(entry->attr))
495 {
496 value_size = entry->size * entry->total_records;
497 }
498 else
499 {
500 value_size = entry->size;
501 }
502
503 /*
504 * 1. For custpack default value, redirect it to nvram_custpack_default_value.c
505 * because ExtractObj.exe needs to find nvram default value from nvram_cust_pack.obj.
506 * 2. always compress custpack so that custpack tool don't need to care which data is compressed or not.
507 */
508 if (NVRAM_IS_CATEGORY_CUSTPACK(entry->category))
509 {
510 thiz->last_custpack = entry->LID;
511 fp = thiz->custpack_fp;
512 default_value = custpack_nvram_ptr.custpack_default[thiz->custpack_index];
513 thiz->custpack_index++;
514 }
515 else
516 {
517 fp = thiz->result_src_fp;
518 default_value = entry->default_value;
519 }
520
521 if (default_value == NVRAM_EF_FF_DEFAULT ||
522 default_value == NVRAM_EF_ZERO_DEFAULT)
523 {
524 NVRAM_TRC_LOW(("Wrong default to compress for LID:%d \n", entry->str_LID));
525 NVRAM_TRC_HIGH("ZERO or FF default!\n");
526 }
527
528 /* At compressing state */
529 if (value_size < 20)
530 {
531 size = NVRAM_MEM_FACTOR2 * value_size;
532 }
533 else
534 {
535 size = NVRAM_MEM_FACTOR1 * value_size;
536 }
537
538 dest = (kal_uint8*)NVRAM_MALLOC(size);
539
540 if (dest == NULL)
541 {
542 NVRAM_TRC_HIGH("No Memory!\n");
543 }
544
545 /* compress function need to know the output buffer size. */
546 /*The first 4 bytes will be compressed buffer size, after this int, there will be compressed data */
547 data_ptr = dest + BUFFER_FOR_LEN;
548 size -= BUFFER_FOR_LEN;
549 ret = thiz->onCompress(data_ptr, &size, default_value, value_size, Z_BEST_COMPRESSION);
550 if (ret != Z_OK)
551 {
552 nvram_compress_mem_dump(entry->str_LID, default_value, value_size, thiz->report_fp);
553 NVRAM_TRC_LOW2("Compress [%s]not Z_OK, %d!\n",entry->str_LID, ret);
554
555 NVRAM_MFREE(dest);
556 return RET_OK;
557 }
558 NVRAM_TRC_LOW(("Compress [%s] OK!\n", entry->str_LID));
559
560 /* Uncompress and verify the data */
561 nvram_compress_verify(thiz, default_value, value_size, data_ptr, size);
562
563 CONV_INT_TO_4BYTES(dest, size);
564
565 if (thiz->max_default_value < value_size)
566 {
567 thiz->max_default_value = value_size;
568 }
569
570 size += BUFFER_FOR_LEN;
571 thiz->org_total_size += value_size;
572 thiz->compress_total_size += size;
573
574 nvram_compress_port_default_value_to_file(str, dest, size, fp);
575
576 /* Port default value extern to nvram_default_value.h */
577 fprintf(thiz->result_header_fp, VALUE_EXTERN, str);
578 /* Write data struct to table */
579 fprintf(thiz->report_fp, VAR_TABLE_ENTRY, entry->str_LID, size, value_size);
580 fflush(thiz->report_fp);
581
582 NVRAM_MFREE(dest);
583
584 return RET_OK;
585}
586
587
588/*****************************************************************************
589 * FUNCTION
590 * nvram_compress_verify
591 * DESCRIPTION
592 * Verify the compressed data
593 * PARAMETERS
594 * thiz [IN]
595 * org_buff [IN]
596 * org_buff_size [IN]
597 * buffer [IN]
598 * buff_size [IN]
599 * RETURNS
600 * Ret
601 *****************************************************************************/
602static void nvram_compress_verify(NvramCompress *thiz,
603 kal_uint8 *org_buff,
604 kal_uint32 org_buff_size,
605 kal_uint8 *buffer,
606 kal_uint32 buff_size)
607{
608 /*----------------------------------------------------------------*/
609 /* Local Variables */
610 /*----------------------------------------------------------------*/
611 kal_int32 ret;
612 kal_uint8* dbuffer;
613 kal_uint32 size;
614
615 /*----------------------------------------------------------------*/
616 /* Code Body */
617 /*----------------------------------------------------------------*/
618 RETURN_IF_FAIL(thiz != NULL);
619 RETURN_IF_FAIL(org_buff != NULL && org_buff_size != 0);
620 RETURN_IF_FAIL(buffer != NULL && buff_size != 0);
621
622 size = 50 * org_buff_size;
623 dbuffer = NVRAM_MALLOC(size);
624 ret = thiz->onUncompress(dbuffer, &size, buffer, buff_size);
625 if (ret != Z_OK)
626 {
627 NVRAM_TRC_HIGH1("Uncompress verify failed 1, ret=%d!\n", ret);
628 }
629
630 if (size != org_buff_size)
631 {
632 NVRAM_TRC_HIGH("Uncompress verify failed 2!\n");
633 }
634
635 if (memcmp(dbuffer, org_buff, org_buff_size) != 0)
636 {
637 NVRAM_TRC_HIGH("Uncompress verify failed 3!\n");
638 }
639
640 NVRAM_MFREE(dbuffer);
641
642 NVRAM_TRC_LOW("Uncompress verify OK!\n");
643}
644
645
646/*****************************************************************************
647 * FUNCTION
648 * nvram_compress_locate_default_value
649 * DESCRIPTION
650 * Locate the default value string
651 * PARAMETERS
652 * value [IN]
653 * RETURNS
654 * kal_uint8 *
655 *****************************************************************************/
656static kal_uint8 *nvram_compress_locate_default_value(const kal_uint8 *value)
657{
658 /*----------------------------------------------------------------*/
659 /* Local Variables */
660 /*----------------------------------------------------------------*/
661 kal_uint8 *str;
662
663 /*----------------------------------------------------------------*/
664 /* Code Body */
665 /*----------------------------------------------------------------*/
666 RETURN_VAL_IF_FAIL(value != NULL, NULL);
667
668 str = strstr(value, ")");
669 if (str == NULL)
670 {
671 str = value;
672 }
673 else
674 {
675 str++;
676 }
677
678 if (*str == '&')
679 {
680 str++;
681 }
682
683 return str;
684}
685
686
687/*****************************************************************************
688 * FUNCTION
689 * nvram_compress_port_default_value_to_file
690 * DESCRIPTION
691 * Port default value to another file
692 * PARAMETERS
693 * value_name [IN]
694 * buffer [IN]
695 * buffer_len [IN]
696 * fp [IN]
697 * RETURNS
698 * void
699 *****************************************************************************/
700static void nvram_compress_port_default_value_to_file(
701 const kal_uint8 *value_name,
702 const kal_uint8 *buffer,
703 const kal_uint32 buffer_len,
704 FILE *fp)
705{
706 /*----------------------------------------------------------------*/
707 /* Local Variables */
708 /*----------------------------------------------------------------*/
709 kal_uint32 i;
710
711 /*----------------------------------------------------------------*/
712 /* Code Body */
713 /*----------------------------------------------------------------*/
714 RETURN_IF_FAIL(value_name != NULL);
715 RETURN_IF_FAIL(buffer != NULL && buffer_len != 0);
716 RETURN_IF_FAIL(fp != NULL);
717
718 fprintf(fp, VALUE_START, value_name, buffer_len);
719 fprintf(fp, VALUE_BRACE);
720
721 for(i = 0; i < buffer_len; i++)
722 {
723 if ((i % 8 == 0))
724 {
725 fprintf(fp, "\n\t");
726 }
727
728 if ((i + 1) == buffer_len)
729 {
730 fprintf(fp, "0x%02X", buffer[i]);
731 }
732 else
733 {
734 fprintf(fp, "0x%02X,", buffer[i]);
735 }
736 }
737
738 fprintf(fp, VALUE_END);
739 fflush(fp);
740
741}
742
743
744/*****************************************************************************
745 * FUNCTION
746 * nvram_compress_custpack_jump_tbl_callback
747 * DESCRIPTION
748 * regenerate jump table callback
749 * PARAMETERS
750 * data [IN]
751 * usr_data [IN]
752 * RETURNS
753 * Ret
754 *****************************************************************************/
755static Ret nvram_compress_custpack_jump_tbl_callback(void *data, void* usr_data)
756{
757 /*----------------------------------------------------------------*/
758 /* Local Variables */
759 /*----------------------------------------------------------------*/
760 ltable_entry_struct *entry;
761 NvramCompress *thiz;
762
763 /*----------------------------------------------------------------*/
764 /* Code Body */
765 /*----------------------------------------------------------------*/
766 RETURN_VAL_IF_FAIL(data != NULL && usr_data != NULL, RET_STOP);
767
768 thiz = (NvramCompress *)usr_data;
769 entry = (ltable_entry_struct *)data;
770
771 if (entry == NULL ||
772 entry->LID == 0 ||
773 entry->size == 0 ||
774 entry->total_records == 0)
775 {
776 return RET_OK;
777 }
778
779 if (strstr(entry->str_default_value, "NVRAM_EF_ZERO_DEFAULT") ||
780 strstr(entry->str_default_value, "NVRAM_EF_FF_DEFAULT"))
781 {
782 return RET_OK;
783 }
784
785 if (NVRAM_IS_CATEGORY_CUSTPACK(entry->category))
786 {
787 fprintf(thiz->custpack_fp, " %s_ZIP", entry->str_default_value);
788 if (thiz->last_custpack != entry->LID)
789 {
790 fprintf(thiz->custpack_fp, ",");
791 }
792 fprintf(thiz->custpack_fp, "\n");
793 }
794
795 return RET_OK;
796}
797
798
799/*****************************************************************************
800 * FUNCTION
801 * nvram_compress_custpack_jump_tbl
802 * DESCRIPTION
803 * regenerate jump table callback
804 * PARAMETERS
805 * data [IN]
806 * usr_data [IN]
807 * RETURNS
808 * Ret
809 *****************************************************************************/
810static void nvram_compress_custpack_jump_tbl(NvramCompress *thiz, FILE* output)
811{
812 /*----------------------------------------------------------------*/
813 /* Local Variables */
814 /*----------------------------------------------------------------*/
815 kal_uint32 i, tbl_idx = sizeof(table_pool)/sizeof(nvram_ltable_tbl_struct) - 1;
816
817 /*----------------------------------------------------------------*/
818 /* Code Body */
819 /*----------------------------------------------------------------*/
820 RETURN_IF_FAIL(thiz != NULL && output != NULL);
821
822 fprintf(output, "const custpack_nvram_header custpack_nvram_ptr = \n");
823 fprintf(output, "{\n");
824 fprintf(output, " %d,\n", 0);
825 fprintf(output, " {\n");
826 for (;tbl_idx >= 0; tbl_idx--)
827 {
828 ltable_entry_struct **ltable = table[tbl_idx].ltable;
829
830 nvram_for_each(ltable, nvram_compress_custpack_jump_tbl_callback, thiz);
831 }
832
833 fprintf(output, " }\n");
834 fprintf(output, "};\n");
835}
836
837
838/*****************************************************************************
839* FUNCTION
840* nvram_compress_create
841* DESCRIPTION
842* create nvram compresser handler
843* PARAMETERS
844* void
845* RETURNS
846* NvramCompress
847*****************************************************************************/
848static NvramCompress* nvram_compress_create(void)
849{
850 /*----------------------------------------------------------------*/
851 /* Local Variables */
852 /*----------------------------------------------------------------*/
853
854 /*----------------------------------------------------------------*/
855 /* Code Body */
856 /*----------------------------------------------------------------*/
857 return &g_nvram_compress_cntx;
858}
859
860
861/*****************************************************************************
862* FUNCTION
863* nvram_compress_init
864* DESCRIPTION
865* init comprresser struct
866* PARAMETERS
867* thiz
868* RETURNS
869* void
870*****************************************************************************/
871static void nvram_compress_init(NvramCompress *thiz)
872{
873 /*----------------------------------------------------------------*/
874 /* Local Variables */
875 /*----------------------------------------------------------------*/
876
877 /*----------------------------------------------------------------*/
878 /* Code Body */
879 /*----------------------------------------------------------------*/
880 RETURN_IF_FAIL(thiz != NULL);
881
882 thiz->count = 0;
883 thiz->max_default_value = 0;
884
885 thiz->report_fp = fopen(COMPRESS_REPORT_FILE, "w+");
886 if (thiz->report_fp == NULL)
887 {
888 NVRAM_TRC_HIGH("File Create Failed!\n");
889 }
890
891 thiz->result_header_fp = fopen(RESULT_HEADER_PATH, "w+");
892 if (thiz->result_header_fp == NULL)
893 {
894 NVRAM_TRC_HIGH("File Create Failed!\n");
895 }
896
897 fprintf(thiz->result_header_fp, FILE_HEADER);
898 fprintf(thiz->result_header_fp, VALUE_MACRO_START);
899
900
901 thiz->result_src_fp = fopen(RESULT_SRC_PATH, "w+");
902 if (thiz->result_src_fp == NULL)
903 {
904 NVRAM_TRC_HIGH("File Create Failed!\n");
905 }
906 fprintf(thiz->result_src_fp, FILE_HEADER);
907 fprintf(thiz->result_src_fp, FILE_INCLUDE);
908 fprintf(thiz->result_src_fp, FILE_COMPILE_OPTION_START);
909
910 // custpack default value file
911 thiz->custpack_fp = fopen(CUSTPACK_PATH, "w+");
912 if (thiz->custpack_fp == NULL)
913 {
914 NVRAM_TRC_HIGH("Custpack file create failed!\n");
915 }
916
917 fprintf(thiz->custpack_fp, FILE_HEADER);
918 fprintf(thiz->custpack_fp, CUSTPACK_FILE_INCLUDE);
919 fprintf(thiz->custpack_fp, CUSTPACK_FILE_COMPILE_OPTION_START);
920
921 thiz->org_total_size = 0;
922 thiz->compress_total_size = 0;
923 thiz->onCompress = compress2;
924 thiz->onUncompress = uncompress;
925
926}
927
928
929/*****************************************************************************
930* FUNCTION
931* nvram_compress_close
932* DESCRIPTION
933* close comprresser handler
934* PARAMETERS
935* thiz
936* RETURNS
937* void
938*****************************************************************************/
939static void nvram_compress_close(NvramCompress *thiz)
940{
941 /*----------------------------------------------------------------*/
942 /* Local Variables */
943 /*----------------------------------------------------------------*/
944 kal_uint8 buffer[NVRAM_TEMP_BUFFER_SIZE];
945 kal_uint32 size;
946
947 /*----------------------------------------------------------------*/
948 /* Code Body */
949 /*----------------------------------------------------------------*/
950 RETURN_IF_FAIL(thiz != NULL);
951
952 /* header file */
953 fprintf(thiz->result_header_fp, VALUE_MAX_SIZE, thiz->max_default_value);
954 fprintf(thiz->result_header_fp, VALUE_MACRO_END);
955 fclose(thiz->result_header_fp);
956
957 nvram_compress_custpack_jump_tbl(thiz, thiz->custpack_fp);
958
959 fprintf(thiz->custpack_fp, CUSTPACK_FILE_COMPILE_OPTION_END);
960 fclose(thiz->custpack_fp);
961
962 /* move table item to src file */
963 fclose(thiz->report_fp);
964
965 fprintf(thiz->result_src_fp, FILE_COMPILE_OPTION_END);
966 fclose(thiz->result_src_fp);
967
968 NVRAM_TRC_LOW2("\n\nTotal: original data=%d, compressed data=%d\n", thiz->org_total_size, thiz->compress_total_size);
969
970 thiz->count = 0;
971 thiz->onCompress = NULL;
972 thiz->onUncompress = NULL;
973 thiz->org_total_size = 0;
974 thiz->compress_total_size = 0;
975}
976
977
978
979/*****************************************************************************
980* FUNCTION
981* nvram_compress
982* DESCRIPTION
983* compress all nvram default value
984* PARAMETERS
985* void
986* RETURNS
987* void
988*****************************************************************************/
989static void nvram_compress(char *project_name, char *broad_ver)
990{
991 /*----------------------------------------------------------------*/
992 /* Local Variables */
993 /*----------------------------------------------------------------*/
994 NvramCompress *thiz = nvram_compress_create();
995
996 /*----------------------------------------------------------------*/
997 /* Code Body */
998 /*----------------------------------------------------------------*/
999 nvram_compress_init(thiz);
1000
1001 /* Only compress comm and cust table */
1002 nvram_for_each(logical_data_item_table_core, nvram_compress_callback, thiz);
1003 nvram_for_each(logical_data_item_table_comm_app, nvram_compress_callback, thiz);
1004 nvram_for_each(logical_data_item_table_cust, nvram_compress_callback, thiz);
1005
1006 nvram_compress_close(thiz);
1007}
1008
1009
1010#endif /* __NVRAM_COMPRESS_SUPPORT__ */
1011
1012#ifdef NVRAM_GEN_LID_TABLE
1013
1014/* core folder */
1015#define NVRAM_FS_COREITEM_PATH "Z:\\NVRAM\\NVD_CORE"
1016#define NVRAM_FS_CALIBRAT_DATAITEM_PATH "Z:\\NVRAM\\CALIBRAT"
1017#define NVRAM_FS_IMPT_DATAITEM_PATH "Z:\\NVRAM\\NVD_IMEI"
1018#define NVRAM_FS_CUST_DATAITEM_PATH "Z:\\NVRAM\\NVD_CUST"
1019#define NVRAM_FS_IMPORTNT_DATAITEM_PATH "Z:\\NVRAM\\IMPORTNT"
1020
1021#ifdef __NVRAM_BACKUP_DISK_FAT__
1022#if defined(__TC01__) && defined(__MTK_TARGET__)
1023#define NVRAM_FS_BACKUP_ROOT_PATH "G:\\NVRAM"
1024#else
1025#define NVRAM_FS_BACKUP_ROOT_PATH "Z:\\NVRAM_BAK"
1026#endif
1027#endif
1028
1029
1030#define NVRAM_FS_DATAITEM_PATH "Z:\\NVRAM\\NVD_DATA"
1031
1032#if defined (__NVRAM_UT_TEST__)
1033/* paths defined in __NVRAM_UT_TEST__ is used for nvram first init test*/
1034
1035/* NVRAM Test Folder Path */
1036#define NVRAM_TEST_FS_COREITEM_PATH "Z:\\NV_TEST\\NVD_CORE"
1037#define NVRAM_TEST_FS_CALIBRAT_DATAITEM_PATH "Z:\\NV_TEST\\CALIBRAT"
1038#define NVRAM_TEST_FS_IMPT_DATAITEM_PATH "Z:\\NV_TEST\\NVD_IMEI"
1039#define NVRAM_TEST_FS_CUST_DATAITEM_PATH "Z:\\NV_TEST\\NVD_CUST"
1040#define NVRAM_TEST_FS_IMPORTNT_DATAITEM_PATH "Z:\\NV_TEST\\IMPORTNT"
1041#define NVRAM_TEST_FS_DATAITEM_PATH "Z:\\NV_TEST\\NVD_DATA"
1042
1043extern kal_taskid nvram_test_task1_id;
1044extern kal_uint8 is_insulation_access;
1045#endif //__NVRAM_UT_TEST__
1046
1047
1048#if defined (__NVRAM_UT_TEST__) && !defined(__NVRAM_LID_CACHE__)
1049#define NVRAM_FS_MAKE_LID_PATH_FILENAME_1( buf, name ) if((is_insulation_access) && (nvram_test_task1_id) && (kal_get_current_task()==nvram_test_task1_id))\
1050 sprintf(buf, "%s\\%s", NVRAM_TEST_FS_DATAITEM_PATH, name);\
1051 else \
1052 sprintf(buf, "%s\\%s", NVRAM_FS_DATAITEM_PATH, name)
1053
1054#define NVRAM_FS_MAKE_CORE_PATH_FILENAME(buf, name) if((is_insulation_access) && (nvram_test_task1_id) && (kal_get_current_task()==nvram_test_task1_id))\
1055 sprintf(buf, "%s\\%s", NVRAM_TEST_FS_COREITEM_PATH, name);\
1056 else \
1057 sprintf(buf, "%s\\%s", NVRAM_FS_COREITEM_PATH, name)
1058
1059#define NVRAM_FS_MAKE_CRITICAL_CALIBRAT_PATH_FILENAME(buf, name) if((is_insulation_access) && (nvram_test_task1_id) && (kal_get_current_task()==nvram_test_task1_id))\
1060 sprintf(buf, "%s\\%s", NVRAM_TEST_FS_CALIBRAT_DATAITEM_PATH, name);\
1061 else \
1062 sprintf(buf, "%s\\%s", NVRAM_FS_CALIBRAT_DATAITEM_PATH, name)
1063
1064#define NVRAM_FS_MAKE_CRITICAL_IMEI_PATH_FILENAME(buf, name) if((is_insulation_access) && (nvram_test_task1_id) && (kal_get_current_task()==nvram_test_task1_id))\
1065 sprintf(buf, "%s\\%s", NVRAM_TEST_FS_IMPT_DATAITEM_PATH, name);\
1066 else \
1067 sprintf(buf, "%s\\%s", NVRAM_FS_IMPT_DATAITEM_PATH, name)
1068
1069#define NVRAM_FS_MAKE_CUST_PATH_FILENAME(buf, name) if((is_insulation_access) && (nvram_test_task1_id) && (kal_get_current_task()==nvram_test_task1_id))\
1070 sprintf(buf, "%s\\%s", NVRAM_TEST_FS_CUST_DATAITEM_PATH, name);\
1071 else \
1072 sprintf(buf, "%s\\%s", NVRAM_FS_CUST_DATAITEM_PATH, name)
1073
1074#define NVRAM_FS_MAKE_IMPORTNT_PATH_FILENAME(buf, name) if((is_insulation_access) && (nvram_test_task1_id) && (kal_get_current_task()==nvram_test_task1_id))\
1075 sprintf(buf, "%s\\%s", NVRAM_TEST_FS_IMPORTNT_DATAITEM_PATH, name);\
1076 else \
1077 sprintf(buf, "%s\\%s", NVRAM_FS_IMPORTNT_DATAITEM_PATH, name)
1078
1079#else
1080#define NVRAM_FS_MAKE_LID_PATH_FILENAME_1( buf, name ) \
1081 sprintf(buf, "%s\\%s", NVRAM_FS_DATAITEM_PATH, name)
1082
1083#define NVRAM_FS_MAKE_CORE_PATH_FILENAME(buf, name) \
1084 sprintf(buf, "%s\\%s", NVRAM_FS_COREITEM_PATH, name);
1085
1086#define NVRAM_FS_MAKE_CRITICAL_CALIBRAT_PATH_FILENAME(buf, name) \
1087 sprintf(buf, "%s\\%s", NVRAM_FS_CALIBRAT_DATAITEM_PATH, name);
1088
1089#define NVRAM_FS_MAKE_CRITICAL_IMPT_PATH_FILENAME(buf, name) \
1090 sprintf(buf, "%s\\%s", NVRAM_FS_IMPT_DATAITEM_PATH, name);
1091
1092#define NVRAM_FS_MAKE_CUST_PATH_FILENAME(buf, name) \
1093 sprintf(buf, "%s\\%s", NVRAM_FS_CUST_DATAITEM_PATH, name);
1094
1095#define NVRAM_FS_MAKE_IMPORTNT_PATH_FILENAME(buf, name) \
1096 sprintf(buf, "%s\\%s", NVRAM_FS_IMPORTNT_DATAITEM_PATH, name);
1097
1098#endif
1099
1100#ifdef __NVRAM_BACKUP_DISK_FAT__
1101#define NVRAM_FS_MAKE_BACKUP_PATH_FILENAME(buf, name) \
1102 sprintf(buf, "%s\\%s", NVRAM_FS_BACKUP_ROOT_PATH, name);
1103#endif
1104
1105
1106#define NVRAM_MAKE_LID_FILENAME(buf, prefix, M, verno) {\
1107 ((kal_char*) (buf))[0] = ((kal_char*) (prefix))[0]; \
1108 ((kal_char*) (buf))[1] = ((kal_char*) (prefix))[1]; \
1109 ((kal_char*) (buf))[2] = ((kal_char*) (prefix))[2]; \
1110 ((kal_char*) (buf))[3] = ((kal_char*) (prefix))[3]; \
1111 ((kal_char*) (buf))[4] = (kal_char) (M); \
1112 ((kal_char*) (buf))[5] = ((kal_char*) (verno))[0]; \
1113 ((kal_char*) (buf))[6] = ((kal_char*) (verno))[1]; \
1114 ((kal_char*) (buf))[7] = ((kal_char*) (verno))[2]; \
1115 ((kal_char*) (buf))[8] = '\0'; \
1116};
1117
1118#define NVRAM_MAKE_PACKAGE_FILENAME(buf, M) { \
1119 ((kal_char*) (buf))[0] = 'P'; \
1120 ((kal_char*) (buf))[1] = 'A'; \
1121 ((kal_char*) (buf))[2] = 'C'; \
1122 ((kal_char*) (buf))[3] = 'K'; \
1123 ((kal_char*) (buf))[4] = (kal_char) (M); \
1124 ((kal_char*) (buf))[5] = 'L'; \
1125 ((kal_char*) (buf))[6] = 'I'; \
1126 ((kal_char*) (buf))[7] = 'D'; \
1127 ((kal_char*) (buf))[8] = '\0'; \
1128};
1129
1130#define TABLE_FILE "..\\..\\..\\~nvram_lid_table.xls"
1131
1132
1133/*****************************************************************************
1134 * FUNCTION
1135 * nvram_make_lid_filename
1136 * DESCRIPTION
1137 * PARAMETERS
1138 * RETURNS
1139 *****************************************************************************/
1140static void nvram_util_make_lid_filename(ltable_entry_struct *ldi, NVRAM_FILE_NAME nvramname, kal_bool first_copy)
1141{
1142 /*----------------------------------------------------------------*/
1143 /* Local Variables */
1144 /*----------------------------------------------------------------*/
1145
1146 /*----------------------------------------------------------------*/
1147 /* Code Body */
1148 /*----------------------------------------------------------------*/
1149
1150 if (ldi == NULL)
1151 {
1152 NVRAM_TRC_HIGH("Empty ldi ");
1153 return;
1154 }
1155
1156#ifdef __NVRAM_PSEUDO_MERGE__
1157 if (NVRAM_IS_ATTR_PACKAGE(ldi->attr))
1158 {
1159 NVRAM_MAKE_PACKAGE_FILENAME(nvramname, 'A');
1160 return;
1161 }
1162#endif
1163
1164 if (NVRAM_IS_ATTR_MULTIPLE(ldi->attr))
1165 {
1166 if (first_copy)
1167 {
1168 NVRAM_MAKE_LID_FILENAME(nvramname, ldi->fileprefix, 'A', ldi->fileverno);
1169 }
1170 else
1171 {
1172 NVRAM_MAKE_LID_FILENAME(nvramname, ldi->fileprefix, 'B', ldi->fileverno);
1173 }
1174 }
1175 else
1176 {
1177 NVRAM_MAKE_LID_FILENAME(nvramname, ldi->fileprefix, '_', ldi->fileverno);
1178 }
1179
1180 return;
1181
1182}
1183
1184
1185
1186/*****************************************************************************
1187 * FUNCTION
1188 * nvram_query_folder_index
1189 * DESCRIPTION
1190 * Get the index of folder
1191 * PARAMETERS
1192 * category
1193 * RETURNS
1194 * Success or Fail
1195 *****************************************************************************/
1196static nvram_folder_enum nvram_query_folder_index(nvram_category_enum category)
1197{
1198 /*----------------------------------------------------------------*/
1199 /* Local Variables */
1200 /*----------------------------------------------------------------*/
1201 nvram_folder_enum folder_index;
1202
1203 /*----------------------------------------------------------------*/
1204 /* Code Body */
1205 /*----------------------------------------------------------------*/
1206#ifdef __NVRAM_MULTI_FOLDERS__
1207 if (NVRAM_IS_CATEGORY_INTERNAL(category))
1208 {
1209 folder_index = NVRAM_NVD_CORE;
1210 }
1211 else if (NVRAM_IS_CATEGORY_CALIBRAT(category))
1212 {
1213 folder_index = NVRAM_NVD_CALI;
1214 }
1215 else if (NVRAM_IS_CATEGORY_IMPORTANT(category))
1216 {
1217 folder_index = NVRAM_NVD_IMPT;
1218 }
1219#ifdef __CCCIFS_SUPPORT__
1220 else if (category & NVRAM_CATEGORY_IMPORTANT_L4)
1221 {
1222 folder_index = NVRAM_NVD_IMPNT;
1223 }
1224 else if (NVRAM_IS_CATEGORY_IMPORTANT_L1(category)
1225 {
1226 folder_index = NVRAM_NVD_IMPNT;
1227 }
1228#endif
1229 #ifdef __NVRAM_CUSTOM_SENSITIVE__
1230 else if (NVRAM_IS_CATEGORY_CUSTOM_SENSITIVE(category))
1231 {
1232 folder_index = NVRAM_NVD_CUST;
1233 }
1234 #endif
1235 else
1236#endif /* __NVRAM_MULTI_FOLDERS__ */
1237 {
1238 folder_index = NVRAM_NVD_DATA;
1239 }
1240
1241 return folder_index;
1242}
1243
1244
1245/*****************************************************************************
1246 * FUNCTION
1247 * nvram_query_file_name
1248 * DESCRIPTION
1249 * Get file full name
1250 * PARAMETERS
1251 * folder_idx :
1252 * nvramname : nvram file
1253 * filename : full name of nvram file
1254 * RETURNS
1255 * Success or Fail
1256 *****************************************************************************/
1257static kal_wchar * nvram_query_file_name(nvram_folder_enum folder_idx, kal_char *nvramname, kal_wchar *filename)
1258{
1259 /*----------------------------------------------------------------*/
1260 /* Local Variables */
1261 /*----------------------------------------------------------------*/
1262
1263 /*----------------------------------------------------------------*/
1264 /* Code Body */
1265 /*----------------------------------------------------------------*/
1266 switch (folder_idx)
1267 {
1268 case NVRAM_NVD_DATA:
1269 {
1270 NVRAM_FS_MAKE_LID_PATH_FILENAME_1(filename, nvramname);
1271 break;
1272 }
1273 #ifdef __NVRAM_MULTI_FOLDERS__
1274 case NVRAM_NVD_CORE:
1275 {
1276 NVRAM_FS_MAKE_CORE_PATH_FILENAME(filename, nvramname);
1277 break;
1278 }
1279 case NVRAM_NVD_CALI:
1280 {
1281 NVRAM_FS_MAKE_CRITICAL_CALIBRAT_PATH_FILENAME(filename, nvramname);
1282 break;
1283 }
1284 case NVRAM_NVD_IMPT:
1285 {
1286 NVRAM_FS_MAKE_CRITICAL_IMEI_PATH_FILENAME(filename, nvramname);
1287 break;
1288 }
1289 #ifdef __CCCIFS_SUPPORT__
1290 case NVRAM_NVD_IMPNT:
1291 {
1292 NVRAM_FS_MAKE_IMPORTNT_PATH_FILENAME(filename, nvramname);
1293 break;
1294 }
1295 #endif
1296 #ifdef __NVRAM_CUSTOM_SENSITIVE__
1297 case NVRAM_NVD_CUST:
1298 {
1299 NVRAM_FS_MAKE_CUST_PATH_FILENAME(filename, nvramname);
1300 break;
1301 }
1302 #endif
1303 #endif /* __NVRAM_MULTI_FOLDERS__ */
1304 #ifdef __NVRAM_BACKUP_DISK_FAT__
1305 case NVRAM_NVD_BAK:
1306 {
1307 NVRAM_FS_MAKE_BACKUP_PATH_FILENAME(filename, nvramname);
1308 break;
1309 }
1310 #endif
1311 default:
1312 {
1313 NVRAM_TRC_HIGH("Wrong folder idex !");
1314 break;
1315 }
1316 }
1317
1318 return filename;
1319}
1320
1321
1322/*****************************************************************************
1323* FUNCTION
1324* nvram_gen_table_callback
1325* DESCRIPTION
1326* main function.
1327* PARAMETERS
1328* None
1329* RETURNS
1330* None
1331*****************************************************************************/
1332static Ret nvram_gen_table_callback(void *data, void* usr_data)
1333{
1334 /*----------------------------------------------------------------*/
1335 /* Local Variables */
1336 /*----------------------------------------------------------------*/
1337 ltable_entry_struct *entry;
1338 FILE* fp;
1339 kal_uint8 filename[9];
1340 kal_uint16 folder_idx;
1341 kal_char src_path[32];
1342
1343 kal_char nvramname[9];
1344
1345 #define TABLE_PATTARN "\n%s\t%s\t%s"
1346 #define TABLE_SEL_FLAG "\t#"
1347 #define TABLE_UNSEL_FLAG "\t"
1348
1349 /*----------------------------------------------------------------*/
1350 /* Code Body */
1351 /*----------------------------------------------------------------*/
1352 RETURN_VAL_IF_FAIL(data != NULL && usr_data != NULL, RET_STOP);
1353 entry = (ltable_entry_struct *)data;
1354 fp = (FILE *)usr_data;
1355
1356 folder_idx = nvram_query_folder_index(entry->category);
1357
1358 nvram_util_make_lid_filename(entry, nvramname, KAL_TRUE);
1359 nvram_query_file_name(folder_idx, nvramname, src_path);
1360
1361 fprintf(fp, TABLE_PATTARN, entry->str_LID, entry->description, src_path);
1362
1363 /* System */
1364 if (entry->attr & NVRAM_ATTR_OTA_RESET)
1365 {
1366 fprintf(fp, TABLE_SEL_FLAG);
1367 }
1368 else
1369 {
1370 fprintf(fp, TABLE_UNSEL_FLAG);
1371 }
1372
1373 /* custpack */
1374 if (NVRAM_IS_CATEGORY_CUSTPACK(entry->category))
1375 {
1376 fprintf(fp, TABLE_SEL_FLAG);
1377 }
1378 else
1379 {
1380 fprintf(fp, TABLE_UNSEL_FLAG);
1381 }
1382
1383 /* Calibartion */
1384 if (NVRAM_IS_CATEGORY_CALIBRAT(entry->category))
1385 {
1386 fprintf(fp, TABLE_SEL_FLAG);
1387 }
1388 else
1389 {
1390 fprintf(fp, TABLE_UNSEL_FLAG);
1391 }
1392
1393 /* Internal */
1394 if (NVRAM_IS_CATEGORY_INTERNAL(entry->category))
1395 {
1396 fprintf(fp, TABLE_SEL_FLAG);
1397 }
1398 else
1399 {
1400 fprintf(fp, TABLE_UNSEL_FLAG);
1401 }
1402
1403 /* Important */
1404 if (NVRAM_IS_CATEGORY_IMPORTANT(entry->category))
1405 {
1406 fprintf(fp, TABLE_SEL_FLAG);
1407 }
1408 else
1409 {
1410 fprintf(fp, TABLE_UNSEL_FLAG);
1411 }
1412
1413 /* Secupack */
1414 if (NVRAM_IS_CATEGORY_SECUPACK(entry->category))
1415 {
1416 fprintf(fp, TABLE_SEL_FLAG);
1417 }
1418 else
1419 {
1420 fprintf(fp, TABLE_UNSEL_FLAG);
1421 }
1422
1423 /* Factory Reset */
1424 if (NVRAM_IS_CATEGORY_FACTORY_RESET(entry->category))
1425 {
1426 fprintf(fp, TABLE_SEL_FLAG);
1427 }
1428 else
1429 {
1430 fprintf(fp, TABLE_UNSEL_FLAG);
1431 }
1432
1433#ifdef __NVRAM_COMPRESS_SUPPORT__
1434 /* Zip default value */
1435 if ((entry->attr & NVRAM_ATTR_ZIP_DEFAULT) ||
1436 NVRAM_IS_CATEGORY_CUSTPACK(entry->category))
1437 {
1438 fprintf(fp, TABLE_SEL_FLAG);
1439 }
1440 else
1441#endif /* __NVRAM_COMPRESS_SUPPORT__ */
1442 {
1443 fprintf(fp, TABLE_UNSEL_FLAG);
1444 }
1445
1446
1447 return RET_OK;
1448}
1449
1450
1451/*****************************************************************************
1452* FUNCTION
1453* nvram_compress_gen_lid_table
1454* DESCRIPTION
1455* main function.
1456* PARAMETERS
1457* None
1458* RETURNS
1459* None
1460*****************************************************************************/
1461void nvram_gen_lid_table(void)
1462{
1463 /*----------------------------------------------------------------*/
1464 /* Local Variables */
1465 /*----------------------------------------------------------------*/
1466 FILE *fp;
1467 /*----------------------------------------------------------------*/
1468 /* Code Body */
1469 /*----------------------------------------------------------------*/
1470 fp = fopen(TABLE_FILE, "w");
1471 if (fp == NULL)
1472 {
1473 NVRAM_TRC_HIGH("File Open Error!");
1474 }
1475 fprintf(fp, "LID \t LID_description \t folder \t System \t Custpack \t Calibartion \t Internal \t Important \t Secupack \t Restore \t compress");
1476
1477 nvram_for_each(logical_data_item_table_core, nvram_gen_table_callback, fp);
1478 nvram_for_each(logical_data_item_table_comm_app, nvram_gen_table_callback, fp);
1479 nvram_for_each(logical_data_item_table_cust, nvram_gen_table_callback, fp);
1480
1481 fclose(fp);
1482}
1483#endif /* NVRAM_GEN_LID_TABLE */
1484
1485/*****************************************************************************
1486* FUNCTION
1487* main
1488* DESCRIPTION
1489* main function.
1490* PARAMETERS
1491* None
1492* RETURNS
1493* None
1494*****************************************************************************/
1495int main(int argc, char *argv[])
1496{
1497 /*----------------------------------------------------------------*/
1498 /* Local Variables */
1499 /*----------------------------------------------------------------*/
1500
1501 /*----------------------------------------------------------------*/
1502 /* Code Body */
1503 /*----------------------------------------------------------------*/
1504
1505 if (argc > 1)
1506 {
1507 #ifdef __NVRAM_COMPRESS_SUPPORT__
1508 NVRAM_TRC_LOW("\nNvram default value compressing....\n");
1509 nvram_compress(argv[1], argv[2]);
1510
1511 #else /* __NVRAM_COMPRESS_SUPPORT__ */
1512 printf("\nDon't support nvram compress!\n");
1513 #endif /* __NVRAM_COMPRESS_SUPPORT__ */
1514
1515 #ifdef NVRAM_GEN_LID_TABLE
1516 nvram_gen_lid_table();
1517 #endif
1518 }
1519 return 0;
1520}
1521