1111using 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