Adding bootloader jump macro into buffered keypress module
This commit is contained in:
		
							parent
							
								
									108b0d3e8e
								
							
						
					
					
						commit
						d85c8b56eb
					
				
					 1 changed files with 43 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -46,11 +46,34 @@
 | 
			
		|||
static uint8_t Bootloader_ConditionSequence[] = {1,16,6,11};
 | 
			
		||||
       uint8_t Bootloader_ConditionState      = 0;
 | 
			
		||||
       uint8_t Bootloader_NextPositionReady   = 1;
 | 
			
		||||
       uint8_t Bootloader_KeyDetected         = 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// ----- Functions -----
 | 
			
		||||
 | 
			
		||||
inline void macro_finishedWithBuffer(void)
 | 
			
		||||
{
 | 
			
		||||
	// Boot loader sequence state handler
 | 
			
		||||
	switch ( KeyIndex_BufferUsed )
 | 
			
		||||
	{
 | 
			
		||||
	// The next bootloader key can now be pressed, if there were no keys processed
 | 
			
		||||
	case 0:
 | 
			
		||||
		Bootloader_NextPositionReady = 1;
 | 
			
		||||
		break;
 | 
			
		||||
	// If keys were detected, and it wasn't in the sequence (or there was multiple keys detected), start bootloader sequence over
 | 
			
		||||
	// This case purposely falls through
 | 
			
		||||
	case 1:
 | 
			
		||||
		if ( Bootloader_KeyDetected )
 | 
			
		||||
			break;
 | 
			
		||||
	default:
 | 
			
		||||
		Bootloader_ConditionState = 0;
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	Bootloader_KeyDetected = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void jumpToBootloader(void)
 | 
			
		||||
{
 | 
			
		||||
	cli();
 | 
			
		||||
| 
						 | 
				
			
			@ -190,7 +213,21 @@ int scancodeMacro( uint8_t scanCode )
 | 
			
		|||
	}
 | 
			
		||||
	return 1;
 | 
			
		||||
	*/
 | 
			
		||||
	return 0;
 | 
			
		||||
	// Is this a bootloader sequence key?
 | 
			
		||||
	if ( !Bootloader_KeyDetected
 | 
			
		||||
	   && Bootloader_NextPositionReady
 | 
			
		||||
	   && scanCode == Bootloader_ConditionSequence[Bootloader_ConditionState] )
 | 
			
		||||
	{
 | 
			
		||||
		Bootloader_KeyDetected = 1;
 | 
			
		||||
		Bootloader_NextPositionReady = 0;
 | 
			
		||||
		Bootloader_ConditionState++;
 | 
			
		||||
	}
 | 
			
		||||
	else if ( Bootloader_ConditionState > 0 && scanCode == Bootloader_ConditionSequence[Bootloader_ConditionState - 1] )
 | 
			
		||||
	{
 | 
			
		||||
		Bootloader_KeyDetected = 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint8_t sendCode = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -292,6 +329,9 @@ void keyPressBufferRead( uint8_t *modifiers, uint8_t numberOfModifiers, uint8_t
 | 
			
		|||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Signal Macro processor that all of the buffered keys have been processed
 | 
			
		||||
	macro_finishedWithBuffer();
 | 
			
		||||
 | 
			
		||||
	// Signal buffer that we've used it
 | 
			
		||||
	scan_finishedWithBuffer();
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -306,7 +346,7 @@ inline void process_macros(void)
 | 
			
		|||
	keyPressBufferRead( MODIFIER_MASK, sizeof(MODIFIER_MASK), KEYINDEX_MASK );
 | 
			
		||||
 | 
			
		||||
	// Check for bootloader condition
 | 
			
		||||
	//if ( Bootloader_ConditionState == sizeof( Bootloader_ConditionSequence ) )
 | 
			
		||||
	//	jumpToBootloader();
 | 
			
		||||
	if ( Bootloader_ConditionState == sizeof( Bootloader_ConditionSequence ) )
 | 
			
		||||
		jumpToBootloader();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue