/* * 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 */