VFD modular clock firmware
Dependencies: DipCortex-EEprom RTC flw mbed
VFDDisplay.h
- Committer:
- Backstr?m
- Date:
- 2015-02-24
- Revision:
- 12:dfb422107412
- Parent:
- 0:f6e68b4ce169
File content as of revision 12:dfb422107412:
/* * VFD Modular Clock - mbed * (C) 2011-14 Akafugu Corporation * * 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 of the License, 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. * */ #ifndef __VFDDISPLAY_H_ #define __VFDDISPLAY_H_ #include "mbed.h" #define MESSAGE_LIMIT 96 class VFDDisplay : public Stream { public: enum TimeMode { Long = 0, Short, Extra }; // Controls how display blinks when m_blink is true enum BlinkMode { Full = 0, // Blink whole display Hours, // Blink hours Minutes, // Blink minutes Seconds // Blink seconds }; protected: TimeMode m_mode; BlinkMode m_blink_mode; public: VFDDisplay(PinName data, PinName clock, PinName latch, PinName blank, uint8_t digits); virtual void cls(); virtual void setPosition(uint8_t pos); virtual int putc(int c) { return _putc(c); } int printf(const char* format, ...); void scroll(int8_t spaces = 1); void resetScroll(); bool scrollFinished(); bool scrollAtOrigin() { return m_scroll_offset == 0; } void setAlarmIndicator(bool on) { m_alarm_indicator = on; } void setGPSIndicator(bool on) { m_gps_indicator = on; } void setColon(bool on) { m_colon = on; } void setDots(uint16_t dots) { m_dots = dots; } void setDot(uint8_t pos, bool on); void setTimeMode(TimeMode mode) { m_mode = mode; } void toggleTimeMode(); //virtual void printTime(time_t t, uint8_t hundredths) = 0; virtual void printTime(struct tm* tm, uint8_t hundredths) = 0; virtual void printTimeLong(struct tm* tm, uint8_t hundredths) = 0; virtual void printTimeSet(struct tm* tm, bool showSeconds = true) = 0; virtual void printDate(struct tm* tm) = 0; void setBrightness(uint8_t brite); uint8_t getBrightness() { return m_brightness; } uint8_t incBrightness(); uint8_t digits() { return m_digits; } void setBlinkMode(BlinkMode blink_mode) { m_blink_mode = blink_mode; } void blink(bool b) { m_blink = b; m_display_on = true; } void blank(bool b) { m_blank = b; } protected: DigitalOut m_data; DigitalOut m_clock; DigitalOut m_latch; //PwmOut m_blank; DigitalOut m_blank; uint8_t m_digits; uint8_t m_multiplex_limit; uint8_t m_multiplex_counter; bool m_reverse_display; uint8_t m_position; int8_t m_scroll_offset; uint8_t m_message_length; bool m_has_dots; char m_buffer[MESSAGE_LIMIT]; char m_dot_buffer[MESSAGE_LIMIT]; char m_char_buffer[MESSAGE_LIMIT]; void writeHV5812(uint8_t data); virtual uint16_t calculateSegments(char c, uint8_t digit) = 0; virtual void handleBlink(char d) = 0; // extra indicators (not present on all displays bool m_alarm_indicator; bool m_gps_indicator; bool m_colon; uint16_t m_dots; // display blinking volatile bool m_blink; volatile bool m_display_on; // brightness uint8_t m_brightness; public: virtual void writeDisplay(uint8_t digit, uint16_t segments) = 0; void multiplexTick(); protected: virtual int _putc(int c); virtual int _getc(); }; #endif // __VFDDISPLAY_H_