summaryrefslogtreecommitdiffstats
path: root/users/edvorakjp/edvorakjp_status.c
blob: 851422ede5b14093ae80aa03245c0ede33f16e0d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "eeprom.h"
#include "edvorakjp.h"

typedef union {
    uint8_t raw;
    struct {
        bool enable_kc_lang;  // for macOS
    };
} edvorakjp_config_t;
static edvorakjp_config_t edvorakjp_config;

typedef struct {
    bool japanese_mode;
} edvorakjp_state_t;
static edvorakjp_state_t edvorakjp_state;

/*
 * private methods
 */
uint8_t eeconfig_read_edvorakjp(void) { return eeprom_read_byte(EECONFIG_EDVORAK); }

void eeconfig_update_edvorakjp(uint8_t val) { eeprom_update_byte(EECONFIG_EDVORAK, val); }

/*
 * public methods
 */
void edvorakjp_status_init(void) {
    edvorakjp_state.japanese_mode = false;
    edvorakjp_config.raw          = eeconfig_read_edvorakjp();
}

bool get_enable_kc_lang(void) { return edvorakjp_config.enable_kc_lang; }

void set_enable_kc_lang(bool new_state) {
    edvorakjp_config.enable_kc_lang = new_state;
    eeconfig_update_edvorakjp(edvorakjp_config.raw);
}

bool get_japanese_mode(void) { return edvorakjp_state.japanese_mode; }

void set_japanese_mode(bool new_state) {
    edvorakjp_state.japanese_mode = new_state;
    if (edvorakjp_state.japanese_mode) {
        if (edvorakjp_config.enable_kc_lang) {
            SEND_STRING(SS_TAP(X_LNG1));
        } else {
            SEND_STRING(SS_LALT("`"));
        }
    } else {
        if (edvorakjp_config.enable_kc_lang) {
            SEND_STRING(SS_TAP(X_LNG2));
        } else {
            SEND_STRING(SS_LALT("`"));
        }
    }
}