mirror of
				https://bitbucket.org/C_Classic/prgkbd.git
				synced 2025-11-04 05:12:06 +01:00 
			
		
		
		
	Added some delay functions (untested)
This commit is contained in:
		
							parent
							
								
									77818dde76
								
							
						
					
					
						commit
						766f788bf3
					
				@ -8,6 +8,8 @@
 | 
			
		||||
#include "usbdrv.h"
 | 
			
		||||
#include "lib/prgKeyboard.h"
 | 
			
		||||
 | 
			
		||||
void delay_ms_wdreset(unsigned int ms);
 | 
			
		||||
 | 
			
		||||
static uchar    reportBuffer[8] = {0,0,0,0,0,0,0,0};    /* buffer for HID reports */
 | 
			
		||||
static uchar    idleRate;           /* in 4 ms units */
 | 
			
		||||
static uchar    newReport = 1;		/* current report */
 | 
			
		||||
@ -310,6 +312,36 @@ void continueExecution() {
 | 
			
		||||
            if ((keyType[oldKey-1] == KEYTYPE_TEXT) || keyAction == KEYACTION_DOWN) reportBuffer[0] &= ~(1 << (instr - 232)); // MOD-Keys (dis)
 | 
			
		||||
            else reportBuffer[0] |= (1 << (instr - 232)); // MOD-Keys (en)
 | 
			
		||||
        }
 | 
			
		||||
        else if (instr >= 240 && instr <= 250) {
 | 
			
		||||
        	// Delay execution by a few ms
 | 
			
		||||
            // Yeah I know the code is ugly, but I don't really care.
 | 
			
		||||
            switch (instr) {
 | 
			
		||||
            case 240:
 | 
			
		||||
                delay_ms_wdreset(10);
 | 
			
		||||
                break;
 | 
			
		||||
            case 241:
 | 
			
		||||
                delay_ms_wdreset(50);
 | 
			
		||||
                break;
 | 
			
		||||
            case 242:
 | 
			
		||||
                delay_ms_wdreset(100);
 | 
			
		||||
                break;
 | 
			
		||||
            case 243:
 | 
			
		||||
                delay_ms_wdreset(250);
 | 
			
		||||
                break;
 | 
			
		||||
            case 244:
 | 
			
		||||
                delay_ms_wdreset(250);
 | 
			
		||||
                delay_ms_wdreset(250);
 | 
			
		||||
                break;
 | 
			
		||||
            case 245:
 | 
			
		||||
                delay_ms_wdreset(500);
 | 
			
		||||
                delay_ms_wdreset(500);
 | 
			
		||||
                delay_ms_wdreset(500);
 | 
			
		||||
                delay_ms_wdreset(500);
 | 
			
		||||
                break;
 | 
			
		||||
            default:
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!flag_keyPress) memAddr++; // increase memory address
 | 
			
		||||
        // Currently there's NO protection.The system could jump onto the next key
 | 
			
		||||
@ -317,6 +349,15 @@ void continueExecution() {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MAX 255ms
 | 
			
		||||
void delay_ms_wdreset(unsigned int ms) {
 | 
			
		||||
    int i;
 | 
			
		||||
    for (i = 0; i < ms; i++) {
 | 
			
		||||
        _delay_ms(1);
 | 
			
		||||
        wdt_reset();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void detectKeyType() {
 | 
			
		||||
    uint8_t keyId;
 | 
			
		||||
    uint16_t x;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user