You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
	
	
		
			
				
					
						
							|  |  |  | #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_LANG1)); | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |       SEND_STRING(SS_LALT("`")); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } else { | 
					
						
							|  |  |  |     if (edvorakjp_config.enable_kc_lang) { | 
					
						
							|  |  |  |       SEND_STRING(SS_TAP(X_LANG2)); | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |       SEND_STRING(SS_LALT("`")); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } |