/elec/propeller-clock

To get this branch, use:
bzr branch http://bzr.ed.am/elec/propeller-clock

« back to all changes in this revision

Viewing changes to src/propeller-clock.cc

  • Committer: Tim Marston
  • Date: 2012-03-10 13:04:29 UTC
  • Revision ID: tim@ed.am-20120310130429-310w5ejo968mc6mo
cleaned-up notes

Show diffs side-by-side

added added

removed removed

82
82
#include "analogue_clock.h"
83
83
#include "digital_clock.h"
84
84
#include "test_pattern.h"
85
 
#include "settings_mode.h"
86
 
#include "text.h"
87
 
#include "text_renderer.h"
88
 
#include "common.h"
89
85
 
90
86
//_____________________________________________________________________________
91
87
//                                                                         data
112
108
static int _major_mode = 0;
113
109
static int _minor_mode = 0;
114
110
 
115
 
#define MAIN_MODE_IDX 1
116
 
#define SETTINGS_MODE_IDX 0
 
111
#define MAIN_MODE_IDX 0
117
112
 
118
113
#define ANALOGUE_CLOCK_IDX 0
119
114
#define DIGITAL_CLOCK_IDX 1
126
121
// activate the current minor mode
127
122
void activate_minor_mode()
128
123
{
129
 
        // reset text
130
 
        Text::reset();
131
 
        leds_off();
132
 
 
133
 
        // give the mode a chance to init
134
124
        switch( _minor_mode ) {
135
125
        case ANALOGUE_CLOCK_IDX: analogue_clock_activate(); break;
136
126
        case DIGITAL_CLOCK_IDX: digital_clock_activate(); break;
137
127
        }
138
128
}
139
129
 
140
 
 
141
 
// activate major mode
142
 
void activate_major_mode()
143
 
{
144
 
        // reset text
145
 
        Text::reset();
146
 
        leds_off();
147
 
 
148
 
        // give the mode a chance to init
149
 
        switch( _major_mode ) {
150
 
        case MAIN_MODE_IDX: activate_minor_mode(); break;
151
 
        case SETTINGS_MODE_IDX: settings_mode_activate(); break;
152
 
        }
153
 
}
154
 
 
155
 
 
156
130
// perform button events
157
131
void do_button_events()
158
132
{
170
144
                                case DIGITAL_CLOCK_IDX: digital_clock_press(); break;
171
145
                                }
172
146
                                break;
173
 
                        case SETTINGS_MODE_IDX: settings_mode_press(); break;
174
147
                        }
175
148
                        break;
176
149
 
180
153
                        case MAIN_MODE_IDX:
181
154
                                if( ++_minor_mode >= 3 )
182
155
                                        _minor_mode = 0;
183
 
                                activate_minor_mode();
 
156
                                switch( _minor_mode ) {
 
157
                                case DIGITAL_CLOCK_IDX: digital_clock_activate(); break;
 
158
                                }
184
159
                                break;
185
 
                        case SETTINGS_MODE_IDX: settings_mode_long_press(); break;
186
160
                        }
187
161
                        break;
188
162
 
189
163
                case 3:
190
164
                        // looooong press (change major mode)
191
 
                        if( ++_major_mode > 1 )
 
165
                        if( ++_major_mode > 0 )
192
166
                                _major_mode = 0;
193
 
                        activate_major_mode();
 
167
                        switch( _major_mode ) {
 
168
                        case MAIN_MODE_IDX: _minor_mode = 0; break;
 
169
                        }
 
170
                        activate_minor_mode();
194
171
                        break;
195
172
                }
196
173
        }
209
186
        if( reset ) segment = NUM_SEGMENTS - 1 - CLOCK_SHIFT;
210
187
#endif
211
188
 
212
 
        // reset the text renderer
213
 
        TextRenderer::reset_buffer();
214
 
 
215
189
        // frame reset
216
190
        if( reset ) {
217
191
                switch( _major_mode ) {
221
195
                        case DIGITAL_CLOCK_IDX: digital_clock_draw_reset(); break;
222
196
                        }
223
197
                        break;
224
 
                case SETTINGS_MODE_IDX: settings_mode_draw_reset(); break;
225
198
                }
226
 
 
227
 
                // tell the text services we're starting a new frame
228
 
                Text::draw_reset();
229
199
        }
230
200
 
231
201
        // draw
237
207
                case TEST_PATTERN_IDX: test_pattern_draw( segment ); break;
238
208
                }
239
209
                break;
240
 
        case SETTINGS_MODE_IDX: settings_mode_draw( segment ); break;
241
210
        }
242
211
 
243
 
        // draw any text that was rendered
244
 
        TextRenderer::output_buffer();
245
 
 
246
212
#if CLOCK_FORWARD
247
213
        if( ++segment >= NUM_SEGMENTS ) segment = 0;
248
214
#else
333
299
        Time::init();
334
300
 
335
301
        // activate the minor mode
336
 
        activate_major_mode();
 
302
        switch( _major_mode ) {
 
303
        case MAIN_MODE_IDX: activate_minor_mode(); break;
 
304
        }
337
305
}
338
306
 
339
307