Chiedo aiuto agli esperti di C... Vorrei fare in modo che premendo un tasto il minimus mandi una serie di tasti. Questo perchè ho un gioco dove mi farebbe comodo scrivere in chat una certa sequenza di lettere per lanciare dei comandi utili.
Nel file main.c ho modificato la riga:
Codice: Seleziona tutto
if(!(c & 0x20)) { keyboard_keys[keycount++] = KEY_B, KEY_A; } //PIN B9
Mettendo direttamente li il comando KEY_B bypasso il file mappings.c
In questo esempio io vglio che alla pressione di quel tasto lui stampi BA, e invece continua imperterrito a stampare solo B. Ho provato con KEY_B, KEY_A; , poi con KEY_B; KEY_A;, ma non funziona.
Ho provato a disattivare anche il debounce commentando la riga _delay_ms(2); ma niente.
Ho notato che il software inserisce il mio "tasto" nella variabile keyboard_keys ,e poi lancia la funzione usb_keyboard_send(); che riporto:
Codice: Seleziona tutto
// send the contents of keyboard_keys and keyboard_modifier_keys
int8_t usb_keyboard_send(void)
{
uint8_t i, intr_state, timeout;
if(!usb_configuration) return -1;
intr_state = SREG;
cli();
UENUM = KEYBOARD_ENDPOINT;
timeout = UDFNUML + 50;
while(1) {
// are we ready to transmit?
if(UEINTX & (1<<RWAL)) break;
SREG = intr_state;
// has the USB gone offline?
if(!usb_configuration) return -1;
// have we waited too long?
if(UDFNUML == timeout) return -1;
// get ready to try checking again
intr_state = SREG;
cli();
UENUM = KEYBOARD_ENDPOINT;
}
UEDATX = keyboard_modifier_keys;
UEDATX = 0;
for(i = 0; i < sizeof(keyboard_keys); i++) {
UEDATX = keyboard_keys[i];
}
UEINTX = 0x3A;
keyboard_idle_count = 0;
SREG = intr_state;
return 0;
}
Ecco questa funzione non riesco molto a capirla, perchè a questo punto penso potrei modificare direttamente questa per fargli mandare la sequenza che voglio, ma non mi raccapacito di quale sia il comando che effettivamente "invia" al pc la roba.