void sim_backlight(int value) { #if LCD_DEPTH <= 8 if (value > 0) { sdl_set_gradient(lcd_surface, &lcd_bl_color_dark, &lcd_bl_color_bright, 0, NUM_SHADES); #ifdef HAVE_LCD_SPLIT sdl_set_gradient(lcd_surface, &lcd_bl_color2_dark, &lcd_bl_color2_bright, NUM_SHADES, NUM_SHADES); #endif } else { sdl_set_gradient(lcd_surface, &lcd_color_dark, &lcd_color_bright, 0, NUM_SHADES); #ifdef HAVE_LCD_SPLIT sdl_set_gradient(lcd_surface, &lcd_color2_dark, &lcd_color2_bright, NUM_SHADES, NUM_SHADES); #endif } #else /* LCD_DEPTH > 8 */ #if defined(HAVE_TRANSFLECTIVE_LCD) && defined(HAVE_LCD_SLEEP) if (!lcd_active()) SDL_SetAlpha(lcd_surface, SDL_SRCALPHA, 0); else SDL_SetAlpha(lcd_surface, SDL_SRCALPHA, MAX(BACKLIGHT_OFF_ALPHA, (value * 255) / 100)); #else SDL_SetAlpha(lcd_surface, SDL_SRCALPHA, (value * 255) / 100); #endif #endif /* LCD_DEPTH */ sdl_gui_update(lcd_surface, 0, 0, SIM_LCD_WIDTH, SIM_LCD_HEIGHT, SIM_LCD_WIDTH, SIM_LCD_HEIGHT, background ? UI_LCD_POSX : 0, background? UI_LCD_POSY : 0); }
/******************************************************************************** PUCK: 函数功能:获取屏幕显示信息,并显示 入口: type-----模式参数;curs-----光标位置 返回: ********************************************************************************/ void screen (u8 type, curs_t curs) { const scrn_t* p; //在此前,vlist的信息已经更新-----PUCK static scrn_t scrn={0xff,0xff,"",{0}}; //不为0,保证第一次就能更新,因为0x000000有可能第一次就是0---PUCK if(scrn.code != vlist.code) //按照全显代码检索:编码已经更新,需要根据vlist的编码获取新的显示元素-----------PUCK { for (p=&table[0];p!=&table[MAXCOUNT];++p) { if ( p->code==vlist.code) //按照显示代码检索 { scrn = *p; break; } } } if(p==&table[MAXCOUNT]) //找不到显示的代码,只显示代码,事件,其他不显示-------PUCK { lcd_code (vlist.user, curs, vlist.dlen); lcd_events(); lcd_update(); return ; } curs %= vlist.dlen; lcd_data (scrn.item, scrn.frmt,scrn.elem.signpos); //18ms lcd_code (vlist.user, curs, vlist.dlen); //26ms lcd_mode (type); ///A/B/C 3种模式 lcd_total (scrn.elem.total ); ///< "总", lcd_phase (scrn.elem.phase ); ///< "A/B/C相", lcd_voltage (scrn.elem.voltage ); ///< "电压", lcd_current (scrn.elem.current ); ///< "电流", lcd_positive (scrn.elem.positive ); ///< mode4.bit4 ? "输入" : "正向"; lcd_negative (scrn.elem.negative ); ///< mode4.bit4 ? "输出" : "反向"; lcd_reactive (scrn.elem.reactive ); ///< "无功", lcd_active (scrn.elem.active ); ///< "有功", lcd_power (scrn.elem.power ); ///< "功率", lcd_factor (scrn.elem.factor ); ///< "因数", lcd_angle (scrn.elem.angle ); ///< "相角", lcd_energy (scrn.elem.energy ); ///< "电量", lcd_demand (scrn.elem.demand ); ///< "需量", lcd_time (scrn.elem.time ); ///< "时间", lcd_charge (scrn.elem.charge ); ///< "电费", lcd_lostvolt (scrn.elem.lostvolt ); ///< "失压", lcd_lostcurt (scrn.elem.lostcurt ); ///< "失流", lcd_periods (scrn.elem.periods ); ///< "时段", lcd_feerate (scrn.elem.feerate ); ///< "费率", lcd_thismonth(scrn.elem.thismonth); ///< "本月", lcd_lastmonth(scrn.elem.lastmonth); ///< mode4.bit5 ? "上月", "上上月" : "上1月", "上2月"; lcd_assemble (scrn.elem.assemble ); ///< "无功组合方式1 or 2", mode4.bit7 ? "逆时针" : "顺时针"; lcd_quadrant (scrn.elem.quadrant ); ///< "XX象限", lcd_tariff (scrn.elem.tariff ); ///< 显示"费率Tx", lcd_times (scrn.elem.times ); ///< 显示"上XX次", lcd_events (); //8ms lcd_update (); }
static void scroll_thread(void) { while (1) { sleep(lcd_scroll_info.ticks); #if defined(HAVE_LCD_ENABLE) || defined(HAVE_LCD_SLEEP) if (lcd_active()) #endif lcd_scroll_fn(); } }
void lcd_enable(bool enable) { if(lcd_active() == enable) return; lcd_set_active(enable); if(lcd_active()) { // enable spi spi_enable(true); // reset imx233_lcdif_reset_lcd(true); imx233_lcdif_reset_lcd(false); mdelay(1); imx233_lcdif_reset_lcd(true); mdelay(1); // "power" on lcd_power(true); // setup registers lcd_power_seq(); lcd_init_seq(); lcd_display_on_seq(); imx233_dma_reset_channel(APB_LCDIF); imx233_dma_start_command(APB_LCDIF, &lcdif_dma[0].dma); } else { // power down lcd_display_off_seq(); lcd_power(false); // stop lcdif BF_CLR(LCDIF_CTRL, DOTCLK_MODE); /* stmp37xx errata: clearing DOTCLK_MODE won't clear RUN: wait until * fifo is empty and then clear manually */ while(!BF_RD(LCDIF_STAT, TXFIFO_EMPTY)); BF_CLR(LCDIF_CTRL, RUN); // disable spi spi_enable(false); } }
void lcd_enable(bool enable) { if (lcd_active() == enable) return; lcd_set_active(enable); /* Turn on or off the display using Linux interface */ ioctl(dev_fd, FBIOBLANK, enable ? VESA_NO_BLANKING : VESA_POWERDOWN); if (enable) send_event(LCD_EVENT_ACTIVATION, NULL); }
void _backlight_on(void) { #ifdef HAVE_LCD_SLEEP if (!lcd_active()) { lcd_awake(); lcd_update(); } #endif /* set GIO34 as PWM1 */ IO_GIO_FSEL3 = (IO_GIO_FSEL3 & 0xFFF3) | (1 << 2); #if (CONFIG_BACKLIGHT_FADING == BACKLIGHT_NO_FADING) _backlight_write_brightness(backlight_brightness); #endif }
void sb_skin_update(enum screen_type screen, bool force) { struct wps_data *data = skin_get_gwps(CUSTOM_STATUSBAR, screen)->data; static long next_update[NB_SCREENS] = {0}; int i = screen; if (!data->wps_loaded) return; if (TIME_AFTER(current_tick, next_update[i]) || force) { #if defined(HAVE_LCD_ENABLE) || defined(HAVE_LCD_SLEEP) /* currently, all remotes are readable without backlight * so still update those */ if (lcd_active() || (i != SCREEN_MAIN)) #endif { bool full_update = skin_do_full_update(CUSTOM_STATUSBAR, screen); skin_update(CUSTOM_STATUSBAR, screen, force || full_update ? SKIN_REFRESH_ALL : SKIN_REFRESH_NON_STATIC); } next_update[i] = current_tick + update_delay; /* don't update too often */ } }
static void scroll_thread(void) { enum { SCROLL_LCD = 0x1, SCROLL_LCD_REMOTE = 0x2, }; sync_display_ticks(); while ( 1 ) { long delay; int scroll; long tick_lcd, tick_remote; tick_lcd = lcd_scroll_info.last_scroll + lcd_scroll_info.ticks; delay = current_tick; if ( #if (CONFIG_PLATFORM & PLATFORM_NATIVE) !remote_initialized || #endif (tick_remote = lcd_remote_scroll_info.last_scroll + lcd_remote_scroll_info.ticks, TIME_BEFORE(tick_lcd, tick_remote))) { scroll = SCROLL_LCD; delay = tick_lcd - delay; } /* TIME_BEFORE(tick_remote, tick_lcd) */ else if (tick_lcd != tick_remote) { scroll = SCROLL_LCD_REMOTE; delay = tick_remote - delay; } else { scroll = SCROLL_LCD | SCROLL_LCD_REMOTE; delay = tick_lcd - delay; } if (scroll_process_message(delay)) continue; if (scroll & SCROLL_LCD) { #if defined(HAVE_LCD_ENABLE) || defined(HAVE_LCD_SLEEP) if (lcd_active()) #endif lcd_scroll_fn(); lcd_scroll_info.last_scroll = current_tick; } if (scroll == (SCROLL_LCD | SCROLL_LCD_REMOTE)) yield(); if (scroll & SCROLL_LCD_REMOTE) { lcd_remote_scroll_fn(); lcd_remote_scroll_info.last_scroll = current_tick; } } }