edvorakjp_status.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #include "eeprom.h"
  2. #include "edvorakjp.h"
  3. typedef union {
  4. uint8_t raw;
  5. struct {
  6. bool enable_jp_extra_layer : 1;
  7. bool enable_kc_lang : 1; // for macOS
  8. };
  9. } edvorakjp_config_t;
  10. static edvorakjp_config_t edvorakjp_config;
  11. typedef struct {
  12. bool japanese_mode;
  13. } edvorakjp_state_t;
  14. static edvorakjp_state_t edvorakjp_state;
  15. /*
  16. * private methods
  17. */
  18. uint8_t eeconfig_read_edvorakjp(void) {
  19. return eeprom_read_byte(EECONFIG_EDVORAK);
  20. }
  21. void eeconfig_update_edvorakjp(uint8_t val) {
  22. eeprom_update_byte(EECONFIG_EDVORAK, val);
  23. }
  24. /*
  25. * public methods
  26. */
  27. void edvorakjp_status_init(void) {
  28. edvorakjp_state.japanese_mode = false;
  29. edvorakjp_config.raw = eeconfig_read_edvorakjp();
  30. }
  31. bool get_enable_jp_extra_layer(void) {
  32. return edvorakjp_config.enable_jp_extra_layer;
  33. }
  34. void set_enable_jp_extra_layer(bool new_state) {
  35. edvorakjp_config.enable_jp_extra_layer = new_state;
  36. eeconfig_update_edvorakjp(edvorakjp_config.raw);
  37. }
  38. bool get_enable_kc_lang(void) {
  39. return edvorakjp_config.enable_kc_lang;
  40. }
  41. void set_enable_kc_lang(bool new_state) {
  42. edvorakjp_config.enable_kc_lang = new_state;
  43. eeconfig_update_edvorakjp(edvorakjp_config.raw);
  44. }
  45. bool get_japanese_mode(void) {
  46. return edvorakjp_state.japanese_mode;
  47. }
  48. void set_japanese_mode(bool new_state) {
  49. edvorakjp_state.japanese_mode = new_state;
  50. if (edvorakjp_state.japanese_mode) {
  51. if (edvorakjp_config.enable_kc_lang) {
  52. SEND_STRING(SS_TAP(X_LANG1));
  53. } else {
  54. SEND_STRING(SS_LALT("`"));
  55. }
  56. } else {
  57. dvorakj_layer_off();
  58. if (edvorakjp_config.enable_kc_lang) {
  59. SEND_STRING(SS_TAP(X_LANG2));
  60. } else {
  61. SEND_STRING(SS_LALT("`"));
  62. }
  63. }
  64. }