rjw | 6c1fd8f | 2022-11-30 14:33:01 +0800 | [diff] [blame^] | 1 | /***************************************************************************** |
| 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 | *****************************************************************************/ |
| 229 | typedef enum{ |
| 230 | RET_OK, |
| 231 | RET_STOP, |
| 232 | RET_OOM, |
| 233 | RET_TOTAL |
| 234 | }Ret; |
| 235 | |
| 236 | typedef kal_int32 (*compress_funcptr)(kal_uint8 *dest, kal_uint32 *destLen,const kal_uint8 *source, kal_uint32 sourceLen, kal_int32 level); |
| 237 | typedef kal_int32 (*uncompress_funcptr)(kal_uint8 *dest, kal_uint32 *destLen, const kal_uint8 *source, kal_uint32 sourceLen); |
| 238 | typedef Ret (*visit_funcptr)(void *data, void* usr_data); |
| 239 | |
| 240 | |
| 241 | typedef 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 | *****************************************************************************/ |
| 265 | static 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 | *****************************************************************************/ |
| 287 | static 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 | *****************************************************************************/ |
| 321 | static 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 | *****************************************************************************/ |
| 357 | static 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 | *****************************************************************************/ |
| 398 | static 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 | *****************************************************************************/ |
| 438 | static 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 | *****************************************************************************/ |
| 602 | static 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 | *****************************************************************************/ |
| 656 | static 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 | *****************************************************************************/ |
| 700 | static 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 | *****************************************************************************/ |
| 755 | static 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 | *****************************************************************************/ |
| 810 | static 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 | *****************************************************************************/ |
| 848 | static 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 | *****************************************************************************/ |
| 871 | static 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 | *****************************************************************************/ |
| 939 | static 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 | *****************************************************************************/ |
| 989 | static 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 | |
| 1043 | extern kal_taskid nvram_test_task1_id; |
| 1044 | extern 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 | *****************************************************************************/ |
| 1140 | static 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 | *****************************************************************************/ |
| 1196 | static 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 | *****************************************************************************/ |
| 1257 | static 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 | *****************************************************************************/ |
| 1332 | static 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 | *****************************************************************************/ |
| 1461 | void 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 | *****************************************************************************/ |
| 1495 | int 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 | |