Line data Source code
1 : #pragma once
2 :
3 : #include "SevenSegmentDisplay.hpp"
4 :
5 : BEGIN_CS_NAMESPACE
6 :
7 : namespace MCU {
8 :
9 : constexpr static uint8_t TimeDisplayLength = 10;
10 : constexpr static uint8_t TimeDisplayAddress = 0x40;
11 :
12 : /// Class that receives and stores the text of the Mackie Control Universal
13 : /// 7-segment time display.
14 : ///
15 : /// @ingroup MIDIInputElements
16 : class TimeDisplay : public SevenSegmentDisplay<TimeDisplayLength> {
17 : public:
18 15 : TimeDisplay(Channel channel = Channel_1)
19 15 : : SevenSegmentDisplay<TimeDisplayLength>(
20 15 : {TimeDisplayAddress, channel}) {}
21 : // TODO: add support for 5-digit bar counts
22 : void print() const {
23 : char barStr[6], beatStr[3], frameStr[4];
24 : getBars(barStr);
25 : getBeats(beatStr);
26 : getFrames(frameStr);
27 : DEBUG(F("Bar: ") << barStr << F("\tBeat: ") << beatStr << F("\tFrame: ")
28 : << frameStr);
29 : }
30 6 : void getBars(char *buff) const {
31 6 : if (getCharacterAt(5) == ' ') {
32 4 : getText(buff, 0, 3);
33 2 : } else if (getCharacterAt(6) == ' ') {
34 1 : getText(buff, 0, 4);
35 : } else {
36 1 : getText(buff, 0, 5);
37 : }
38 6 : }
39 6 : void getBeats(char *buff) const {
40 6 : if (getCharacterAt(5) == ' ') {
41 4 : getText(buff, 3, 2);
42 2 : } else if (getCharacterAt(6) == ' ') {
43 1 : getText(buff, 4, 2);
44 : } else {
45 1 : getText(buff, 5, 2);
46 : }
47 6 : }
48 6 : void getFrames(char *buff) const {
49 6 : if (getCharacterAt(5) == ' ') {
50 4 : getText(buff, 7, 3);
51 2 : } else if (getCharacterAt(6) == ' ') {
52 1 : getText(buff, 8, 2);
53 : } else {
54 1 : getText(buff, 9, 1);
55 : }
56 6 : }
57 : };
58 :
59 : } // namespace MCU
60 :
61 : END_CS_NAMESPACE
|