Skip to content

Commit e91ea51

Browse files
committed
Cloxel working with intro + second pulse
1 parent d18605c commit e91ea51

4 files changed

Lines changed: 323 additions & 125 deletions

File tree

‎usermods/wordcloxel/time_word_convertor.h‎

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,15 @@
44
#include <string>
55
#include "cloxel_layout_base.h"
66

7-
#ifndef NULL
8-
#define NULL (void *)0
9-
#endif
10-
11-
typedef struct
12-
{
13-
const ledpos_t* pToPastWord;
14-
const ledpos_t* pMinutesMainWord;
15-
const ledpos_t* pMinutesRestWord;
16-
const ledpos_t* pHalfWord;
17-
const ledpos_t* pHourWord;
18-
19-
const ledpos_t* pDayWord;
20-
const ledpos_t* pDayOfMonthWord;
21-
const ledpos_t* pMonthWord;
22-
const ledpos_t* pSecondLeds;
23-
} ClockWords_t;
24-
257
///////////////////////////////////////////////////////////////////////////////
268
// ClockTimeWordConvertor class
279
// Helper class to convert time into words for different clockstypes
2810
///////////////////////////////////////////////////////////////////////////////
2911
class ClockTimeWordConvertor
3012
{
3113
public:
32-
static void convert(const ledclocklayout_t* pLayout, ClockWords_t* pOutput);
14+
static void convertHoursAndMinutes(const ledclocklayout_t* pLayout, std::vector<const ledpos_t*> &rVecOutput);
15+
static void convertSeconds(const ledclocklayout_t* pLayout, std::vector<const ledpos_t*> &rVecOutput);
16+
static void convertDate(const ledclocklayout_t* pLayout, std::vector<const ledpos_t*> &rVecOutput);
17+
static void convertWeekDay(const ledclocklayout_t* pLayout, std::vector<const ledpos_t*> &rVecOutput);
3318
};

‎usermods/wordcloxel/time_word_onvertor.cpp‎

Lines changed: 75 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -11,33 +11,21 @@
1111
using namespace std;
1212

1313
//
14-
// @brief Start the console
14+
// @brief Convert the given time into words for the given clock layout
1515
//
16-
void ClockTimeWordConvertor::convert(const ledclocklayout_t* pLayout, ClockWords_t* pOutput)
16+
void ClockTimeWordConvertor::convertHoursAndMinutes(const ledclocklayout_t* pLayout, std::vector<const ledpos_t*> &rVecOutput)
1717
{
18-
if (pLayout == nullptr || pOutput == nullptr) return;
18+
if (pLayout == nullptr) return;
1919

2020
// check the time
21-
int minutes = minute(localTime);
22-
23-
int nWeekDay = weekday(localTime) - 1; // Weekday returns (1 - 7), Sunday = 1
24-
int nSeconds = second(localTime);
2521
int nHours = hour(localTime);
2622
int nMinutes = minute(localTime);
27-
int monthday = day(localTime);
28-
int monthnum = month(localTime) - 1; // Januari = 1, we need it to be 0
2923

3024
// Quarter past 1 => 14 minutes to half two (in Dutch this is correct, English I don't know)
3125
int min5 = nMinutes / 5;
3226
int min1 = nMinutes % 5;
3327
int hours = nHours;
3428

35-
// Clear the struct
36-
pOutput->pMinutesMainWord = NULL;
37-
pOutput->pMinutesRestWord = NULL;
38-
pOutput->pHalfWord = NULL;
39-
pOutput->pToPastWord = NULL;
40-
4129
const ledtime_t* pTime = &(pLayout->time);
4230

4331
switch (pLayout->timeFormat)
@@ -103,22 +91,25 @@ void ClockTimeWordConvertor::convert(const ledclocklayout_t* pLayout, ClockWords
10391

10492
switch(min5)
10593
{
106-
case 0: pOutput->pMinutesMainWord = pTime->hour_full; break;
107-
case 1: pOutput->pMinutesMainWord = pTime->minute_5 ; pOutput->pToPastWord = pTime->past_5 ; break;
108-
case 2: pOutput->pMinutesMainWord = pTime->minute_10; pOutput->pToPastWord = pTime->past_10; break;
109-
case 3: pOutput->pMinutesMainWord = pTime->quarter; pOutput->pToPastWord = pTime->past_15; break;
110-
case 4: pOutput->pMinutesMainWord = pTime->minute_10; pOutput->pToPastWord = pTime->to_10 ; pOutput->pHalfWord = pTime->half_to; break;
111-
case 5: pOutput->pMinutesMainWord = pTime->minute_5 ; pOutput->pToPastWord = pTime->to_5 ; pOutput->pHalfWord = pTime->half_to; break;
112-
case 6: pOutput->pMinutesMainWord = pTime->half_to; break;
113-
case 7: pOutput->pMinutesMainWord = pTime->minute_5 ; pOutput->pToPastWord = pTime->past_5 ; pOutput->pHalfWord = pTime->half_past; break;
114-
case 8: pOutput->pMinutesMainWord = pTime->minute_10; pOutput->pToPastWord = pTime->past_10; pOutput->pHalfWord = pTime->half_past; break;
115-
case 9: pOutput->pMinutesMainWord = pTime->quarter; pOutput->pToPastWord = pTime->to_15 ; break;
116-
case 10: pOutput->pMinutesMainWord = pTime->minute_10; pOutput->pToPastWord = pTime->to_10 ; break;
117-
case 11: pOutput->pMinutesMainWord = pTime->minute_5 ; pOutput->pToPastWord = pTime->to_5 ; break;
94+
case 0: rVecOutput.push_back(pTime->hour_full); break;
95+
case 1: rVecOutput.push_back(pTime->minute_5); rVecOutput.push_back(pTime->past_5); break;
96+
case 2: rVecOutput.push_back(pTime->minute_10); rVecOutput.push_back(pTime->past_10); break;
97+
case 3: rVecOutput.push_back(pTime->quarter); rVecOutput.push_back(pTime->past_15); break;
98+
case 4: rVecOutput.push_back(pTime->minute_10); rVecOutput.push_back(pTime->to_10); rVecOutput.push_back(pTime->half_to); break;
99+
case 5: rVecOutput.push_back(pTime->minute_5); rVecOutput.push_back(pTime->to_5); rVecOutput.push_back(pTime->half_to); break;
100+
case 6: rVecOutput.push_back(pTime->half_to); break;
101+
case 7: rVecOutput.push_back(pTime->minute_5); rVecOutput.push_back(pTime->past_5); rVecOutput.push_back(pTime->half_past); break;
102+
case 8: rVecOutput.push_back(pTime->minute_10); rVecOutput.push_back(pTime->past_10); rVecOutput.push_back(pTime->half_past); break;
103+
case 9: rVecOutput.push_back(pTime->quarter); rVecOutput.push_back(pTime->to_15); break;
104+
case 10: rVecOutput.push_back(pTime->minute_10); rVecOutput.push_back(pTime->to_10); break;
105+
case 11: rVecOutput.push_back(pTime->minute_5); rVecOutput.push_back(pTime->to_5); break;
118106
}
119107

120108
const ledpos_t* pMinute5Words[5] {NULL, pTime->minute_1, pTime->minute_2, pTime->minute_3,pTime->minute_4};
121-
pOutput->pMinutesRestWord = pMinute5Words[min1];
109+
if (min1 > 0)
110+
{
111+
rVecOutput.push_back(pMinute5Words[min1]);
112+
}
122113
}
123114
break;
124115

@@ -130,30 +121,68 @@ void ClockTimeWordConvertor::convert(const ledclocklayout_t* pLayout, ClockWords
130121

131122
switch(min5)
132123
{
133-
case 0: pOutput->pMinutesMainWord = pTime->hour_full; break;
134-
case 1: pOutput->pMinutesMainWord = pTime->minute_5 ; pOutput->pToPastWord = pTime->past_5 ; break;
135-
case 2: pOutput->pMinutesMainWord = pTime->minute_10; pOutput->pToPastWord = pTime->past_10; break;
136-
case 3: pOutput->pMinutesMainWord = pTime->quarter; pOutput->pToPastWord = pTime->past_15; break;
137-
case 4: pOutput->pMinutesMainWord = pTime->minute_20; pOutput->pToPastWord = pTime->past_20; break;
138-
case 5: pOutput->pMinutesMainWord = pTime->minute_25; pOutput->pToPastWord = pTime->past_25; break;
139-
case 6: pOutput->pMinutesMainWord = pTime->half_past; break;
140-
case 7: pOutput->pMinutesMainWord = pTime->minute_25; pOutput->pToPastWord = pTime->to_25; break;
141-
case 8: pOutput->pMinutesMainWord = pTime->minute_20; pOutput->pToPastWord = pTime->to_20; break;
142-
case 9: pOutput->pMinutesMainWord = pTime->quarter; pOutput->pToPastWord = pTime->to_15; break;
143-
case 10: pOutput->pMinutesMainWord = pTime->minute_10; pOutput->pToPastWord = pTime->to_10; break;
144-
case 11: pOutput->pMinutesMainWord = pTime->minute_5 ; pOutput->pToPastWord = pTime->to_5 ; break;
124+
case 0: rVecOutput.push_back(pTime->hour_full); break;
125+
case 1: rVecOutput.push_back(pTime->minute_5); rVecOutput.push_back(pTime->past_5); break;
126+
case 2: rVecOutput.push_back(pTime->minute_10); rVecOutput.push_back(pTime->past_10); break;
127+
case 3: rVecOutput.push_back(pTime->quarter); rVecOutput.push_back(pTime->past_15); break;
128+
case 4: rVecOutput.push_back(pTime->minute_20); rVecOutput.push_back(pTime->past_20); break;
129+
case 5: rVecOutput.push_back(pTime->minute_25); rVecOutput.push_back(pTime->past_25); break;
130+
case 6: rVecOutput.push_back(pTime->half_past); break;
131+
case 7: rVecOutput.push_back(pTime->minute_25); rVecOutput.push_back(pTime->to_25); break;
132+
case 8: rVecOutput.push_back(pTime->minute_20); rVecOutput.push_back(pTime->to_20); break;
133+
case 9: rVecOutput.push_back(pTime->quarter); rVecOutput.push_back(pTime->to_15); break;
134+
case 10: rVecOutput.push_back(pTime->minute_10); rVecOutput.push_back(pTime->to_10); break;
135+
case 11: rVecOutput.push_back(pTime->minute_5); rVecOutput.push_back(pTime->to_5); break;
145136
}
146137

147138
const ledpos_t* pMinute5Words[5] {NULL, pTime->minute_1, pTime->minute_2, pTime->minute_3,pTime->minute_4};
148-
pOutput->pMinutesRestWord = pMinute5Words[min1];
139+
if (min1 > 0)
140+
{
141+
rVecOutput.push_back(pMinute5Words[min1]);
142+
}
149143
}
150144
break;
151145
}
152146

153-
pOutput->pHourWord = pLayout->hours[hours % 12];
147+
// And finally, add the hour
148+
rVecOutput.push_back(pLayout->hours[hours % 12]);
149+
}
150+
151+
//
152+
// @brief Convert the seconds into words for the given clock layout
153+
//
154+
void ClockTimeWordConvertor::convertSeconds(const ledclocklayout_t* pLayout, std::vector<const ledpos_t*> &rVecOutput)
155+
{
156+
if (pLayout == nullptr) return;
157+
158+
int nSeconds = second(localTime);
159+
160+
rVecOutput.push_back(pLayout->time.second);
161+
}
162+
163+
//
164+
// @brief Convert the date into words for the given clock layout
165+
//
166+
void ClockTimeWordConvertor::convertDate(const ledclocklayout_t* pLayout, std::vector<const ledpos_t*> &rVecOutput)
167+
{
168+
if (pLayout == nullptr) return;
169+
170+
int monthday = day(localTime);
171+
int monthnum = month(localTime) - 1; // Januari = 1, we need it to be 0
172+
173+
rVecOutput.push_back(pLayout->days[(monthday - 1) % 31]); // Days start at 1
174+
rVecOutput.push_back(pLayout->months[monthnum % 12]);
175+
}
176+
154177

155-
pOutput->pDayWord = pLayout->weekdays[nWeekDay % 7];
156-
pOutput->pDayOfMonthWord = pLayout->days[(monthday - 1) % 31]; // Days start at 1
157-
pOutput->pMonthWord = pLayout->months[monthnum % 12];
158-
pOutput->pSecondLeds = pTime->second;
178+
//
179+
// @brief Convert the date into words for the given clock layout
180+
//
181+
void ClockTimeWordConvertor::convertWeekDay(const ledclocklayout_t* pLayout, std::vector<const ledpos_t*> &rVecOutput)
182+
{
183+
if (pLayout == nullptr) return;
184+
185+
// check the time
186+
int nWeekDay = weekday(localTime) - 1; // Weekday returns (1 - 7), Sunday = 1
187+
rVecOutput.push_back(pLayout->weekdays[nWeekDay % 7]);
159188
}

0 commit comments

Comments
 (0)