#ifdef CONFIG_SPECIALFILE1_CONTAINCHECK #include "stdio.h" #include "types.h" #include #include #include #define FIELD_NUM 5 BOOL bFactory_File_Exit=FALSE; struct field { const char *tag; int value; }; struct factory_file { struct field fields[FIELD_NUM]; }; struct factory_file ft_file = { \ { \ {"P",0}, \ {"B",0}, \ {"M",0}, \ {"F",0}, \ {"R",0}, \ },\ }; static void get_line(char *file_data, int line, char *ret_line) { int i, j, s, e; int current_line = 0; char *ptr; s = 0; for (i = 0; i < 2048; i++) { if (file_data[i] == '\n' || file_data[i] == '\0') { current_line++; if (current_line > line) { e = i; break; } else { s = i+1; } } } memcpy(ret_line, &file_data[s], e-s); ret_line[e-s] = '\0'; if (ret_line[e-s-1] == '\r') ret_line[e-s-1] = '\0'; } static int paser_field(char *line) { char tag[256]; char value[256]; int i,j; j = 0; for (i = 0; i < 256; i++) { if ((line[i] != ' ') && (line[i] != ':')) { tag[j++] = line[i]; } else if (line[i] == ':') { tag[j] = '\0'; i++; break; } } j = 0; for (i; i < 256; i++) { if ((line[i] != ' ') && (line[i] != '\0')) { if ((line[i] >= '0') && (line[i] <= '9')) value[j++] = line[i]; } else if (line[i] == '\0') { value[j] = '\0'; break; } } for (i = 0; i < FIELD_NUM; i++) { if(!strcmp(ft_file.fields[i].tag, tag)) { ft_file.fields[i].value = myatoi(value); break; } } if (i != FIELD_NUM) { printf("tag:%s value:%s\n", tag, value); return TRUE; } else { printf("unknow tag:%s\n", tag); return FALSE; } } BOOL parser_special_file(char *file_data) { int i,ret; char line[256]; for (i = 0; i < 10; i++) { memset(line,0x0,256); get_line(file_data,i, line); if (line[0] == 'Z') break; ret = paser_field(line); if (ret == FALSE) { printf(" special_file format error!!!!\n"); return FALSE; } } if(get_special_value("P")>0 && get_special_value("P")<4) bFactory_File_Exit = TRUE; return TRUE; } int get_special_value(const char *tag) { int i; int ret = -1; for (i = 0; i < FIELD_NUM; i++) { if(!strcmp(ft_file.fields[i].tag, tag)) { ret = ft_file.fields[i].value; break; } } return ret; } BOOL has_factory_file() { return bFactory_File_Exit; } void factory_file_setting(Factory_File_Setting status) { BootRomShareData_t *BootromShareData = (void *) KMFBR_ShareData_ShadowAddress; int panel_index = 0; int BurnMode = 0; if(bFactory_File_Exit) { if(status==Factory_Panel_Resolution) { panel_index = get_special_value("P"); switch(panel_index) { case 0: BootromShareData->Panelresolution = 0; break; case 1: BootromShareData->Panelresolution = 1440; break; case 2: BootromShareData->Panelresolution = 1366; break; case 3: BootromShareData->Panelresolution = 1920; break; default: BootromShareData->Panelresolution = 0; break; } } else if (status==Factory_BurnMode) { BurnMode = get_special_value("B"); if(BurnMode) *(volatile UINT8 *)OnEvent_INT_Status_MMIOAddress |= Special_FileBit1; } } } #endif //CONFIG_SPECIALFILE1_CONTAINCHECK