mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-31 13:22:31 +01:00 
			
		
		
		
	 9bea41c9b2
			
		
	
	
		9bea41c9b2
		
	
	
	
	
		
			
			* Get things working except indicators * Attempt to get things working * hmm * Compiles but doesn't run * Make data transfer work * Get all indicators working * Remove old transport * Prepare for pullreq * Revert keymap from testing to production * Final error checking for pull request * Remove autogenerated is_command from config.h * Rewrite pin toggles using qmk functions
		
			
				
	
	
		
			229 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			229 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Copyright 2018 Ryota Goto
 | |
|  *
 | |
|  * This program is free software: you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU General Public License as published by
 | |
|  * the Free Software Foundation, either version 2 of the License, or
 | |
|  * (at your option) any later version.
 | |
|  *
 | |
|  * This program is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|  * GNU General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU General Public License
 | |
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| #include "orbit.h"
 | |
| #include "split_util.h"
 | |
| #include "transport.h"
 | |
| 
 | |
| 
 | |
| // Call led_toggle to set LEDs easily
 | |
| // LED IDs:
 | |
| // 
 | |
| // (LEFT) 0 1 2   |   3 4 5 (RIGHT)
 | |
| 
 | |
| void led_toggle(int id, bool on) {
 | |
| 	
 | |
| 	if (isLeftHand) {
 | |
| 		switch(id) {
 | |
| 			case 0:
 | |
| 				// Left hand C6
 | |
| 				if (on)
 | |
| 					//PORTC |= (1<<6);
 | |
| 					writePinHigh(C6);
 | |
| 				else
 | |
| 					//PORTC &= ~(1<<6);
 | |
| 					writePinLow(C6);
 | |
| 				break;
 | |
| 			case 1:
 | |
| 				// Left hand B6
 | |
| 				if (on)
 | |
| 					//PORTB |= (1<<6);
 | |
| 					writePinHigh(B6);
 | |
| 				else
 | |
| 					//PORTB &= ~(1<<6);
 | |
| 					writePinLow(B6);
 | |
| 				break;
 | |
| 			case 2:
 | |
| 				// Left hand B5
 | |
| 				if (on)
 | |
| 					//PORTB |= (1<<5);
 | |
| 					writePinHigh(B5);
 | |
| 				else
 | |
| 					//PORTB &= ~(1<<5);
 | |
| 					writePinLow(B5);
 | |
| 				break;
 | |
| 			default:
 | |
| 				break;
 | |
| 		}
 | |
| 	} else {
 | |
| 		switch(id) {
 | |
| 			case 3:
 | |
| 				// Right hand F6
 | |
| 				if (on)
 | |
| 					//PORTF |= (1<<6);
 | |
| 					writePinHigh(F6);
 | |
| 				else
 | |
| 					//PORTF &= ~(1<<6);
 | |
| 					writePinLow(F6);
 | |
| 				break;
 | |
| 			case 4:
 | |
| 				// Right hand F7
 | |
| 				if (on)
 | |
| 					//PORTF |= (1<<7);
 | |
| 					writePinHigh(F7);
 | |
| 				else
 | |
| 					//PORTF &= ~(1<<7);
 | |
| 					writePinLow(F7);
 | |
| 				break;
 | |
| 			case 5:
 | |
| 				// Right hand C7
 | |
| 				if (on)
 | |
| 					//PORTC |= (1<<7);
 | |
| 					writePinHigh(C7);
 | |
| 				else
 | |
| 					//PORTC &= ~(1<<7);
 | |
| 					writePinLow(C7);
 | |
| 				break;
 | |
| 			default:
 | |
| 				break;
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Set all LEDs at once using an array of 6 booleans
 | |
| // LED IDs:
 | |
| // 
 | |
| // (LEFT) 0 1 2   |   3 4 5 (RIGHT)
 | |
| // 
 | |
| // Ex. set_all_leds({ false, false, false, true, true, true }) would turn off left hand, turn on right hand
 | |
| 
 | |
| void set_all_leds(bool leds[6]) {
 | |
| 	for (int i = 0; i < 6; i++) {
 | |
| 		led_toggle(i, leds[i]);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void set_layer_indicators(uint8_t layer) {
 | |
| 	
 | |
| 	switch (layer)
 | |
| 	{
 | |
| 		case 0:
 | |
| 			led_toggle(0, true);
 | |
| 			led_toggle(1, false);
 | |
| 			led_toggle(2, false);
 | |
| 			break;
 | |
| 		case 1:
 | |
| 			led_toggle(0, true);
 | |
| 			led_toggle(1, true);
 | |
| 			led_toggle(2, false);
 | |
| 			break;
 | |
| 		case 2:
 | |
| 			led_toggle(0, true);
 | |
| 			led_toggle(1, true);
 | |
| 			led_toggle(2, true);
 | |
| 			break;
 | |
| 		case 3:
 | |
| 			led_toggle(0, false);
 | |
| 			led_toggle(1, true);
 | |
| 			led_toggle(2, true);
 | |
| 			break;
 | |
| 		case 4:
 | |
| 			led_toggle(0, false);
 | |
| 			led_toggle(1, false);
 | |
| 			led_toggle(2, true);
 | |
| 			break;
 | |
| 		default:
 | |
| 			led_toggle(0, true);
 | |
| 			led_toggle(1, false);
 | |
| 			led_toggle(2, true);
 | |
| 			break;
 | |
| 	}
 | |
| 	
 | |
| }
 | |
| 
 | |
| void matrix_init_kb(void) {
 | |
| 	// put your keyboard start-up code here
 | |
| 	// runs once when the firmware starts up
 | |
| 	
 | |
| 	// Initialize indicator LEDs to output
 | |
| 	if (isLeftHand)
 | |
| 	{
 | |
| 		setPinOutput(C6);
 | |
| 		setPinOutput(B6);
 | |
| 		setPinOutput(B5);
 | |
| 		//DDRC |= (1<<6);
 | |
| 		//DDRB |= (1<<6);
 | |
| 		//DDRB |= (1<<5);
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		setPinOutput(F6);
 | |
| 		setPinOutput(F7);
 | |
| 		setPinOutput(C7);
 | |
| 		//DDRF |= (1<<6);
 | |
| 		//DDRF |= (1<<7);
 | |
| 		//DDRC |= (1<<7);
 | |
| 	}
 | |
| 
 | |
| 	set_layer_indicators(0);
 | |
| 	
 | |
| 	matrix_init_user();
 | |
| }
 | |
| 
 | |
| void matrix_scan_kb(void) {
 | |
| 	// put your looping keyboard code here
 | |
| 	// runs every cycle (a lot)
 | |
| 
 | |
| 	matrix_scan_user();
 | |
| }
 | |
| 
 | |
| bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
 | |
| 	// put your per-action keyboard code here
 | |
| 	// runs for every action, just before processing by the firmware
 | |
| 
 | |
| 	return process_record_user(keycode, record);
 | |
| }
 | |
| 
 | |
| void led_set_kb(uint8_t usb_led) {
 | |
| 	// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
 | |
| 	
 | |
| 	if (is_keyboard_master()) {
 | |
| 	
 | |
| 		serial_m2s_buffer.nlock_led = IS_LED_ON(usb_led, USB_LED_NUM_LOCK);
 | |
| 		serial_m2s_buffer.clock_led = IS_LED_ON(usb_led, USB_LED_CAPS_LOCK);
 | |
| 		serial_m2s_buffer.slock_led = IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK);
 | |
| 
 | |
| 		led_toggle(3, IS_LED_ON(usb_led, USB_LED_NUM_LOCK));
 | |
| 		led_toggle(4, IS_LED_ON(usb_led, USB_LED_CAPS_LOCK));
 | |
| 		led_toggle(5, IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK));
 | |
| 		
 | |
| 	}
 | |
| 
 | |
| 	led_set_user(usb_led);
 | |
| }
 | |
| 
 | |
| uint32_t layer_state_set_kb(uint32_t state) {
 | |
| 	
 | |
| 	if (is_keyboard_master())
 | |
| 	{
 | |
| 		
 | |
| 		current_layer = biton32(state);
 | |
| 		serial_m2s_buffer.current_layer = biton32(state);
 | |
| 		
 | |
| 		// If left half, do the LED toggle thing
 | |
| 		if (isLeftHand)
 | |
| 		{
 | |
| 			set_layer_indicators(biton32(state));
 | |
| 		}
 | |
| 		
 | |
| 	}
 | |
| 	// NOTE: Do not set slave LEDs here.
 | |
| 	// This is not called on slave
 | |
| 	
 | |
| 	return layer_state_set_user(state);
 | |
| }
 | |
| 
 | |
| 
 |