static void openDisplay(void) { DPRINTF("openDisplay\n"); openMouse(); openKeyboard(); openFramebuffer(); // init mouse after setting graf mode on tty avoids packets being // snarfed by gpm ms->init(ms); }
void ExternalDisplay::setResolution(int ID) { struct fb_var_screeninfo info; int ret = 0; if (!openFramebuffer()) return; ret = ioctl(mFd, FBIOGET_VSCREENINFO, &mVInfo); if(ret < 0) { ALOGD("In %s: FBIOGET_VSCREENINFO failed Err Str = %s", __FUNCTION__, strerror(errno)); } ALOGD_IF(DEBUG, "%s: GET Info<ID=%d %dx%d (%d,%d,%d)," "(%d,%d,%d) %dMHz>", __FUNCTION__, mVInfo.reserved[3], mVInfo.xres, mVInfo.yres, mVInfo.right_margin, mVInfo.hsync_len, mVInfo.left_margin, mVInfo.lower_margin, mVInfo.vsync_len, mVInfo.upper_margin, mVInfo.pixclock/1000/1000); //If its a valid mode and its a new ID - update var_screeninfo if ((isValidMode(ID)) && mCurrentMode != ID) { const struct disp_mode_timing_type *mode = &supported_video_mode_lut[0]; unsigned count = sizeof(supported_video_mode_lut)/sizeof (*supported_video_mode_lut); for (unsigned int i = 0; i < count; ++i) { const struct disp_mode_timing_type *cur = &supported_video_mode_lut[i]; if (cur->video_format == ID) mode = cur; } mode->set_info(mVInfo); ALOGD_IF(DEBUG, "%s: SET Info<ID=%d => Info<ID=%d %dx %d" "(%d,%d,%d), (%d,%d,%d) %dMHz>", __FUNCTION__, ID, mVInfo.reserved[3], mVInfo.xres, mVInfo.yres, mVInfo.right_margin, mVInfo.hsync_len, mVInfo.left_margin, mVInfo.lower_margin, mVInfo.vsync_len, mVInfo.upper_margin, mVInfo.pixclock/1000/1000); mVInfo.activate = FB_ACTIVATE_NOW | FB_ACTIVATE_ALL | FB_ACTIVATE_FORCE; ret = ioctl(mFd, FBIOPUT_VSCREENINFO, &mVInfo); if(ret < 0) { ALOGD("In %s: FBIOPUT_VSCREENINFO failed Err Str = %s", __FUNCTION__, strerror(errno)); } mCurrentMode = ID; } }
void HDMIDaemon::setResolution(int ID) { struct fb_var_screeninfo info; if (!openFramebuffer()) return; #ifdef FORCE_AUTO_RESOLUTION ID = 0; #endif //If its a valid mode and its a new ID - update var_screeninfo if ((isValidMode(ID)) && mCurrentID != ID) { const struct disp_mode_timing_type *mode = &supported_video_mode_lut[0]; for (unsigned int i = 0; i < sizeof(supported_video_mode_lut)/sizeof(*supported_video_mode_lut); ++i) { const struct disp_mode_timing_type *cur = &supported_video_mode_lut[i]; if (cur->video_format == ID) mode = cur; } SurfaceComposerClient::enableHDMIOutput(0); ioctl(fd1, FBIOGET_VSCREENINFO, &info); LOGD("GET Info<ID=%d %dx%d (%d,%d,%d), (%d,%d,%d) %dMHz>", info.reserved[3], info.xres, info.yres, info.right_margin, info.hsync_len, info.left_margin, info.lower_margin, info.vsync_len, info.upper_margin, info.pixclock/1000/1000); mode->set_info(info); LOGD("SET Info<ID=%d => Info<ID=%d %dx%d (%d,%d,%d), (%d,%d,%d) %dMHz>", ID, info.reserved[3], info.xres, info.yres, info.right_margin, info.hsync_len, info.left_margin, info.lower_margin, info.vsync_len, info.upper_margin, info.pixclock/1000/1000); info.activate = FB_ACTIVATE_NOW | FB_ACTIVATE_ALL | FB_ACTIVATE_FORCE; ioctl(fd1, FBIOPUT_VSCREENINFO, &info); mCurrentID = ID; } //Powerup ioctl(fd1, FBIOBLANK, FB_BLANK_UNBLANK); ioctl(fd1, FBIOGET_VSCREENINFO, &info); //Pan_Display ioctl(fd1, FBIOPAN_DISPLAY, &info); property_set("hw.hdmiON", "1"); //Inform SF about HDMI SurfaceComposerClient::enableHDMIOutput(1); }
void ExtDisplayObserver::setResolution(int ID) { struct fb_var_screeninfo info; if (!openFramebuffer()) return; //If its a valid mode and its a new ID - update var_screeninfo if ((isValidMode(ID)) && mCurrentID != ID) { const struct disp_mode_timing_type *mode = &supported_video_mode_lut[0]; unsigned count = sizeof(supported_video_mode_lut)/sizeof (*supported_video_mode_lut); for (unsigned int i = 0; i < count; ++i) { const struct disp_mode_timing_type *cur = &supported_video_mode_lut[i]; if (cur->video_format == ID) mode = cur; } ioctl(fd, FBIOGET_VSCREENINFO, &info); ALOGD_IF(EXT_OBSERVER_DEBUG, "%s: GET Info<ID=%d %dx%d (%d,%d,%d)," "(%d,%d,%d) %dMHz>", __FUNCTION__, info.reserved[3], info.xres, info.yres, info.right_margin, info.hsync_len, info.left_margin, info.lower_margin, info.vsync_len, info.upper_margin, info.pixclock/1000/1000); mode->set_info(info); ALOGD_IF(EXT_OBSERVER_DEBUG, "%s: SET Info<ID=%d => Info<ID=%d %dx%d" "(%d,%d,%d), (%d,%d,%d) %dMHz>", __FUNCTION__, ID, info.reserved[3], info.xres, info.yres, info.right_margin, info.hsync_len, info.left_margin, info.lower_margin, info.vsync_len, info.upper_margin, info.pixclock/1000/1000); info.activate = FB_ACTIVATE_NOW | FB_ACTIVATE_ALL | FB_ACTIVATE_FORCE; ioctl(fd, FBIOPUT_VSCREENINFO, &info); mCurrentID = ID; } //Powerup ioctl(fd, FBIOBLANK, FB_BLANK_UNBLANK); ioctl(fd, FBIOGET_VSCREENINFO, &info); //Pan_Display ioctl(fd, FBIOPAN_DISPLAY, &info); property_set("hw.hdmiON", "1"); }
int HDMIDaemon::processFrameworkCommand() { char buffer[128]; int ret; if ((ret = read(mAcceptedConnection, buffer, sizeof(buffer) -1)) < 0) { LOGE("Unable to read framework command (%s)", strerror(errno)); return -1; } else if (!ret) return -1; buffer[ret] = 0; if (!strcmp(buffer, HDMI_CMD_ENABLE_HDMI)) { if (!openFramebuffer()) return -1; LOGD(HDMI_CMD_ENABLE_HDMI); if(mNxtMode != -1) { LOGD("processFrameworkCommand: setResolution with =%d", mNxtMode); setResolution(mNxtMode); } } else if (!strcmp(buffer, HDMI_CMD_DISABLE_HDMI)) { LOGD(HDMI_CMD_DISABLE_HDMI); if (!openFramebuffer()) return -1; property_set("hw.hdmiON", "0"); SurfaceComposerClient::enableHDMIOutput(0); close(fd1); fd1 = -1; } else if (!strncmp(buffer, HDMI_CMD_SET_ASWIDTH, strlen(HDMI_CMD_SET_ASWIDTH))) { float asWidthRatio; int ret = sscanf(buffer, HDMI_CMD_SET_ASWIDTH "%f", &asWidthRatio); if(ret==1) { SurfaceComposerClient::setActionSafeWidthRatio(asWidthRatio); } } else if (!strncmp(buffer, HDMI_CMD_SET_ASHEIGHT, strlen(HDMI_CMD_SET_ASHEIGHT))) { float asHeightRatio; int ret = sscanf(buffer, HDMI_CMD_SET_ASHEIGHT "%f", &asHeightRatio); if(ret==1) { SurfaceComposerClient::setActionSafeHeightRatio(asHeightRatio); } } else if (!strncmp(buffer, HDMI_CMD_HPDOPTION, strlen(HDMI_CMD_HPDOPTION))) { int option; int ret = sscanf(buffer, HDMI_CMD_HPDOPTION "%d", &option); if (ret == 1) { LOGD(HDMI_CMD_HPDOPTION ": %d", option); writeHPDOption(option); } } else { int mode; int ret = sscanf(buffer, HDMI_CMD_CHANGE_MODE "%d", &mode); if (ret == 1) { LOGD(HDMI_CMD_CHANGE_MODE); /* To change the resolution */ char prop_val[PROPERTY_VALUE_MAX]; property_get("enable.hdmi.edid", prop_val, "0"); int val = atoi(prop_val); if(val == 1) { /* Based on the hw.yRes set the resolution */ char property_value[PROPERTY_VALUE_MAX]; property_get("hdmi.yRes", property_value, "0"); int yres = atoi(property_value); switch(yres){ case 480: mode = 3; break; case 720: mode = 4; break; case 1080: mode = 16; break; default: break; } } // If we have a valid fd1 - setresolution if(fd1 > 0) { setResolution(mode); } else { // Store the mode mNxtMode = mode; } } } return 0; }