~arthofer-thomas/flashlight-firmware/ramp-table

« back to all changes in this revision

Viewing changes to ToyKeeper/spaghetti-monster/meteor/meteor.c

  • Committer: Selene Scriven
  • Date: 2018-11-11 23:20:36 UTC
  • mfrom: (388.1.8 event-rework)
  • Revision ID: bzr@toykeeper.net-20181111232036-uvhk7fubpcq7tw2r
merged event-rework branch; reduces ROM size by ~700 bytes and simplifies event system

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
2
 * Meteor: Meteor M43 clone UI for SpaghettiMonster.
 
3
 * (in progress, not really in a usable state yet)
3
4
 *
4
5
 * Copyright (C) 2017 Selene Scriven
5
6
 *
29
30
#define DONT_DELAY_AFTER_BATTCHECK
30
31
//#define USE_EEPROM
31
32
//#define EEPROM_BYTES 5
32
 
#define MAX_CLICKS 11
33
33
#include "spaghetti-monster.h"
34
34
 
35
35
// FSM states
36
 
uint8_t base_off_state(EventPtr event, uint16_t arg);
37
 
uint8_t ui1_off_state(EventPtr event, uint16_t arg);
38
 
uint8_t ui2_off_state(EventPtr event, uint16_t arg);
39
 
uint8_t ui3_off_state(EventPtr event, uint16_t arg);
40
 
uint8_t base_on_state(EventPtr event, uint16_t arg, uint8_t *mode, uint8_t *group);
41
 
uint8_t ui1_on_state(EventPtr event, uint16_t arg);
42
 
uint8_t ui2_on_state(EventPtr event, uint16_t arg);
43
 
uint8_t ui3_on_state(EventPtr event, uint16_t arg);
44
 
uint8_t beacon_state(EventPtr event, uint16_t arg);
45
 
uint8_t battcheck_state(EventPtr event, uint16_t arg);
46
 
uint8_t strobe_state(EventPtr event, uint16_t arg);
47
 
uint8_t biking_state(EventPtr event, uint16_t arg);
48
 
uint8_t lockout_state(EventPtr event, uint16_t arg);
49
 
uint8_t momentary_state(EventPtr event, uint16_t arg);
 
36
uint8_t base_off_state(Event event, uint16_t arg);
 
37
uint8_t ui1_off_state(Event event, uint16_t arg);
 
38
uint8_t ui2_off_state(Event event, uint16_t arg);
 
39
uint8_t ui3_off_state(Event event, uint16_t arg);
 
40
uint8_t base_on_state(Event event, uint16_t arg, uint8_t *mode, uint8_t *group);
 
41
uint8_t ui1_on_state(Event event, uint16_t arg);
 
42
uint8_t ui2_on_state(Event event, uint16_t arg);
 
43
uint8_t ui3_on_state(Event event, uint16_t arg);
 
44
uint8_t beacon_state(Event event, uint16_t arg);
 
45
uint8_t battcheck_state(Event event, uint16_t arg);
 
46
uint8_t strobe_state(Event event, uint16_t arg);
 
47
uint8_t biking_state(Event event, uint16_t arg);
 
48
uint8_t lockout_state(Event event, uint16_t arg);
 
49
uint8_t momentary_state(Event event, uint16_t arg);
50
50
// Not a FSM state, just handles stuff common to all low/med/hi states
51
 
uint8_t any_mode_state(EventPtr event, uint16_t arg, uint8_t *primary, uint8_t *secondary, uint8_t *modes);
 
51
uint8_t any_mode_state(Event event, uint16_t arg, uint8_t *primary, uint8_t *secondary, uint8_t *modes);
52
52
 
53
53
#ifdef USE_EEPROM
54
54
void load_config();
99
99
    set_level(0);
100
100
}
101
101
 
102
 
uint8_t base_off_state(EventPtr event, uint16_t arg) {
 
102
uint8_t base_off_state(Event event, uint16_t arg) {
103
103
    // turn emitter off when entering state
104
104
    if (event == EV_enter_state) {
105
105
        set_level(0);
154
154
    return EVENT_NOT_HANDLED;
155
155
}
156
156
 
157
 
uint8_t ui1_off_state(EventPtr event, uint16_t arg) {
 
157
uint8_t ui1_off_state(Event event, uint16_t arg) {
158
158
    UI = 1;
159
159
    if (event == EV_enter_state) {
160
160
        return EVENT_HANDLED;
187
187
    return base_off_state(event, arg);
188
188
}
189
189
 
190
 
uint8_t ui2_off_state(EventPtr event, uint16_t arg) {
 
190
uint8_t ui2_off_state(Event event, uint16_t arg) {
191
191
    UI = 2;
192
192
    if (event == EV_enter_state) {
193
193
        return EVENT_HANDLED;
220
220
    return base_off_state(event, arg);
221
221
}
222
222
 
223
 
uint8_t ui3_off_state(EventPtr event, uint16_t arg) {
 
223
uint8_t ui3_off_state(Event event, uint16_t arg) {
224
224
    UI = 3;
225
225
    if (event == EV_enter_state) {
226
226
        return EVENT_HANDLED;
259
259
    return base_off_state(event, arg);
260
260
}
261
261
 
262
 
uint8_t base_on_state(EventPtr event, uint16_t arg, uint8_t *mode, uint8_t *group) {
 
262
uint8_t base_on_state(Event event, uint16_t arg, uint8_t *mode, uint8_t *group) {
263
263
    // 1 click: off
264
264
    if (event == EV_1click) {
265
265
        set_state(base_off_state, 0);
289
289
    return EVENT_NOT_HANDLED;
290
290
}
291
291
 
292
 
uint8_t ui1_on_state(EventPtr event, uint16_t arg) {
 
292
uint8_t ui1_on_state(Event event, uint16_t arg) {
293
293
    // turn on LED when entering the mode
294
294
    static uint8_t *mode = &UI1_mode1;
295
295
    static uint8_t *group = UI1_group1;
328
328
    return base_on_state(event, arg, mode, group);
329
329
}
330
330
 
331
 
uint8_t ui2_on_state(EventPtr event, uint16_t arg) {
 
331
uint8_t ui2_on_state(Event event, uint16_t arg) {
332
332
    // turn on LED when entering the mode
333
333
    static uint8_t *mode = &UI2_mode1;
334
334
    static uint8_t *group = UI2_group1;
377
377
    return base_on_state(event, arg, mode, group);
378
378
}
379
379
 
380
 
uint8_t ui3_on_state(EventPtr event, uint16_t arg) {
 
380
uint8_t ui3_on_state(Event event, uint16_t arg) {
381
381
    // turn on LED when entering the mode
382
382
    static uint8_t *mode = &UI3_mode1;
383
383
    if (event == EV_enter_state) {
424
424
}
425
425
 
426
426
 
427
 
uint8_t blinky_base_state(EventPtr event, uint16_t arg) {
 
427
uint8_t blinky_base_state(Event event, uint16_t arg) {
428
428
    // 1 click: off
429
429
    if (event == EV_1click) {
430
430
        set_state(base_off_state, 0);
433
433
    return EVENT_NOT_HANDLED;
434
434
}
435
435
 
436
 
uint8_t beacon_state(EventPtr event, uint16_t arg) {
 
436
uint8_t beacon_state(Event event, uint16_t arg) {
437
437
    return blinky_base_state(event, arg);
438
438
}
439
439
 
440
 
uint8_t battcheck_state(EventPtr event, uint16_t arg) {
 
440
uint8_t battcheck_state(Event event, uint16_t arg) {
441
441
    return EVENT_NOT_HANDLED;
442
442
}
443
443
 
444
 
uint8_t strobe_state(EventPtr event, uint16_t arg) {
445
 
    return blinky_base_state(event, arg);
446
 
}
447
 
 
448
 
uint8_t biking_state(EventPtr event, uint16_t arg) {
449
 
    return blinky_base_state(event, arg);
450
 
}
451
 
 
452
 
uint8_t lockout_state(EventPtr event, uint16_t arg) {
453
 
    return blinky_base_state(event, arg);
454
 
}
455
 
 
456
 
uint8_t momentary_state(EventPtr event, uint16_t arg) {
 
444
uint8_t strobe_state(Event event, uint16_t arg) {
 
445
    return blinky_base_state(event, arg);
 
446
}
 
447
 
 
448
uint8_t biking_state(Event event, uint16_t arg) {
 
449
    return blinky_base_state(event, arg);
 
450
}
 
451
 
 
452
uint8_t lockout_state(Event event, uint16_t arg) {
 
453
    return blinky_base_state(event, arg);
 
454
}
 
455
 
 
456
uint8_t momentary_state(Event event, uint16_t arg) {
457
457
    return blinky_base_state(event, arg);
458
458
}
459
459