This is the code:
Code: Select all
if(scancode == 69) /* Numlock */
{
while(inportb(0x64) & 0x2);
outportb(0x60, 0xed);
outportb(0x60, 1);
}
Code: Select all
if(scancode == 69) /* Numlock */
{
while(inportb(0x64) & 0x2);
outportb(0x60, 0xed);
outportb(0x60, 1);
}
Code: Select all
outportb(0x60, 2);
Right, and one could also check he receives an ACK (0xFA) after sending both bytes.B.E wrote: I am not quite show on this but don't you have to wait before you send the next byte after you send the set LED command
Code: Select all
#define scrollock (unsigned char) 0x01
#define numlock (unsigned char) 0x02
#define capslock (unsigned char) 0x04
void kbd_updateleds(unsigned char led) {
if(led == 0) {
leds = 0;
} else {
if (leds == (leds | led)) { //If led is already on
leds = leds ^ led; // turn led off
} else {
leds = leds | led; // else turn led on
}
}
kbd_senddata(0xED);
kbd_senddata(leds); //update led status
}
Code: Select all
...
static char kbdstatus = 0;
static short caps=0; //variable to acces caps lock status
static short num=0; //variable to access num lock status
...
void kbd_led(char status)
{
int st;
do {
st = inb(0x64);
} while (st&0x02);
outb(0x60, 0x0ed);
do {
st = inb(0x64);
} while (st&0x02);
outb(0x60, status&0x07);
}
void switch_num_lock()
{
if (num) num=0; else num=1; //is numlock on or off ?
if(!(kbdstatus&NUM_LOCK))
{
kbdstatus |= NUM_LOCK;
}
else
kbdstatus &= (CAPS_LOCK|SCROLL_LOCK);
kbd_led(kbdstatus);
}
void switch_caps_lock()
{
if (caps) caps=0; else caps=1;
if(!(kbdstatus&CAPS_LOCK))
{
kbdstatus |= CAPS_LOCK;
}
else
kbdstatus &= (NUM_LOCK|SCROLL_LOCK);
kbd_led(kbdstatus);
}
void switch_scroll_lock()
{
if(!(kbdstatus&SCROLL_LOCK))
{
kbdstatus |= SCROLL_LOCK;
}
else
kbdstatus &= (NUM_LOCK|CAPS_LOCK);
kbd_led(kbdstatus);
}
Code: Select all
void switch_num_lock()
{
if (num) num=0; else num=1; //is numlock on or off ?
if(!(kbdstatus&NUM_LOCK))
{
kbdstatus |= NUM_LOCK;
}
else
kbdstatus &= (CAPS_LOCK|SCROLL_LOCK);
kbd_led(kbdstatus);
}
Code: Select all
void switch_num_lock()
{
if (num) num=0; else num=1; //is numlock on or off ?
if(!(kbdstatus&NUM_LOCK))
{
kbdstatus |= NUM_LOCK;
}
else
kbdstatus &= (~NUM_LOCK);
kbd_led(kbdstatus);
}
Code: Select all
void switch_num_lock()
{
if (num) num=0; else num=1; //is numlock on or off ?
kbdstatus ^= NUM_LOCK;
kbd_led(kbdstatus);
}
Code: Select all
void switch_num_lock()
{
num = !num; //is numlock on or off ?
kbdstatus ^= NUM_LOCK;
kbd_led(kbdstatus);
}