/* * Copyright (C) 2017 Jared Boone, ShareBrained Technology, Inc. * * This file is part of PortaPack. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, * Boston, MA 02110-1301, USA. */ #include "backlight.hpp" #include "portapack_io.hpp" namespace portapack { void BacklightOnOff::on() { if( !is_on() ) { io.lcd_backlight(true); on_ = true; } } void BacklightOnOff::off() { if( is_on() ) { io.lcd_backlight(false); on_ = false; } } void BacklightCAT4004::set_level(const value_t value) { auto target = value; // Clip target value to valid range. if( target < 0 ) { target = 0; } if( target > maximum_level ) { target = maximum_level; } if( is_on() ) { pulses(target); } else { level_ = target; } } void BacklightCAT4004::on() { if( !is_on() ) { io.lcd_backlight(true); halPolledDelay(ticks_setup); on_ = true; // Just enabled driver, initial value is maximum. const auto target_level = level(); level_ = maximum_level; pulses(target_level); } } void BacklightCAT4004::off() { if( is_on() ) { io.lcd_backlight(false); chThdSleepMilliseconds(ms_pwrdwn); on_ = false; } } void BacklightCAT4004::pulses(value_t target) { while(level() != target) { pulse(); } } void BacklightCAT4004::pulse() { io.lcd_backlight(false); halPolledDelay(ticks_lo); io.lcd_backlight(true); halPolledDelay(ticks_hi); level_ -= 1; if( level_ < 0 ) { level_ = levels() - 1; } } } /* namespace portapack */