char* getHighestMode(int fb) { int i = 0; if(read_mode_finished == 0) { read_graphics_fb_mode(fb); } if(g_config_len > 0) { for(i = 0; i<g_config_len; i++) { if(isModeValid(fb, g_config_mode[i].mode, strlen(g_config_mode[i].mode))) break; } return g_config_mode[i].mode; } return disp_class_list[fb].disp_mode_list[i].mode; }
int isModeValid(int fb, char* pMode, int len) { int err = 0; int i; LOGW("----------isModeValid:pMode=%s, len=%d", pMode, len); err = read_graphics_fb_mode(fb); if(err) return 0; for(i=0; i<disp_class_list[fb].disp_mode_length; i++) { LOGW("----------isModeValid:disp_mode_list[%d].mode=%s", i, disp_class_list[fb].disp_mode_list[i].mode); if(!strncmp(disp_class_list[fb].disp_mode_list[i].mode, pMode, len)) { return 1; } } return 0; }
int isModeValid(int fb, const char* pMode, int len) { int err = 0; int i; //LOGW("isModeValid:pMode=%s, len=%d", pMode, len); if(read_mode_finished == 0) { err = read_graphics_fb_mode(fb); if(err) return 0; } for(i=0; i<disp_class_list[fb].disp_mode_length; i++) { //LOGW("isModeValid:disp_mode_list[%d].mode=%s", i, disp_class_list[fb].disp_mode_list[i].mode); if(!strncmp(disp_class_list[fb].disp_mode_list[i].mode, pMode, len)) { return 1; } } return 0; }
char* disp_get_disp_modelist(int fbid) { LOGI("disp_get_disp_modelist"); int i; char temp_mode[20]; int pointer =0; char mode_send[MAX_DISP_DEVICE_MODE][20]; int num_send = 0; if (g_config_len == 0) { char conf_modes[1024]; int size; memset(conf_modes, 0, sizeof(conf_modes)); memset(&g_config_mode[0], 0, sizeof(g_config_mode)); int fd = open("/system/etc/display_mode.conf", O_RDONLY, 0); if(fd < 0) { LOGE("Warning: /system/etc/display_mode.conf not defined"); } else { size = read(fd, conf_modes, sizeof(conf_modes)); if(size > 0) { char* m_start = conf_modes; int m_len = 0; char *pmode = conf_modes; while(*pmode != '\0') { if (*pmode == '\n') { m_len = pmode - m_start + 1; strncpy(g_config_mode[g_config_len].mode, m_start, m_len); g_config_len ++; m_start = pmode + 1; } pmode ++; }//while } }//else } memset(&disp_class_list[fbid].disp_mode_list[0], 0, MAX_DISP_DEVICE_MODE*sizeof(disp_mode)); read_graphics_fb_mode(fbid); memset(mode_send, 0, sizeof(mode_send)); for(i=0; i<disp_class_list[fbid].disp_mode_length; i++) { //strncpy(temp_mode+pointer, disp_mode_list[i].mode, strlen(disp_mode_list[i].mode)-1); //pointer = pointer + strlen(disp_mode_list[i].mode) -1; //strncpy(temp_mode+pointer, " ", 1); //pointer = pointer + 1; if (g_config_len > 0) { int k, j; for(k=0; k<g_config_len; k++) { if(!strcmp(g_config_mode[k].mode, disp_class_list[fbid].disp_mode_list[i].mode)) { strncpy(temp_mode, disp_class_list[fbid].disp_mode_list[i].mode, strlen(disp_class_list[fbid].disp_mode_list[i].mode)-1); temp_mode[strlen(disp_class_list[fbid].disp_mode_list[i].mode)-1] = '\0'; for(j=0; j<num_send; j++) { if(!strcmp(mode_send[j], temp_mode)) { break; } } if(j == num_send) { strcpy(mode_send[num_send], temp_mode); num_send++; send_msg_with_code(InterfaceListResult, temp_mode, -1); } } } } else { strncpy(temp_mode, disp_class_list[fbid].disp_mode_list[i].mode, strlen(disp_class_list[fbid].disp_mode_list[i].mode)-1); temp_mode[strlen(disp_class_list[fbid].disp_mode_list[i].mode)-1] = '\0'; send_msg_with_code(InterfaceListResult, temp_mode, -1); } } //temp_mode[pointer] = '\0'; //LOGW("modelist = %s", temp_mode); send_msg_with_code(CommandOkay, "Interface list completed", -1); return temp_mode; }