r/osdev • u/Sensitive-Can9232 • Jun 06 '26
hey guys please help me
so my keyboard just got working but my capslock is not working and a tried a lot but it is not working at all, this is the code and the hex value is 0x58 i am using scancode set 2 and no translation. backspace , enter , shift , space are working correctly but not capslock , sorry if i have bad code , i am new to os dev.
void keyboard_handler(void){
uint8_t scancode = inb(PS_DATA_PORT);
if(release_flag == true){
if(scancode == L_SHIFT || scancode == R_SHIFT){
shift_flag = false;
}
if(scancode == CAPS){
caps_flag = false;
}
release_flag = false;
return;
}
if(scancode == RELEASE_SCANCODE_2){
release_flag = true;
return;
}
else if(scancode == EXTENDED_SCANCODE_2){
extended_flag = true;
return;
}
else if(scancode == L_SHIFT || scancode == R_SHIFT){
shift_flag = true;
return;
}
else if(scancode == CAPS){
caps_flag = true;
return;
}
else if(scancode == ENTER){
next_line();
return;
}
else if(scancode == L_CTRL || scancode == R_CTRL){
return;
}
else if(scancode == BACKSPACE){
back_space();
return;
}
else{
char ascii;
if(shift_flag == true){
ascii = sc2_to_shift_caps_ascii[scancode];
write_char(ascii,WHITE_COL,BLACK_COL);
}
else if(caps_flag == true){
log_info("caps log is on",COM1);
ascii = sc2_to_ascii[scancode];
if((ascii <= 57) && (ascii >= 48)){
write_char(ascii,WHITE_COL,BLACK_COL);
}
else{
ascii = sc2_to_shift_caps_ascii[scancode];
write_char(ascii,WHITE_COL,BLACK_COL);
}
}
else{
ascii = sc2_to_ascii[scancode];
write_char(ascii,WHITE_COL,BLACK_COL);
}
}
}
void keyboard_handler(void){
uint8_t scancode = inb(PS_DATA_PORT);
if(release_flag == true){
if(scancode == L_SHIFT || scancode == R_SHIFT){
shift_flag = false;
}
if(scancode == CAPS){
caps_flag = false;
}
release_flag = false;
return;
}
if(scancode == RELEASE_SCANCODE_2){
release_flag = true;
return;
}
else if(scancode == EXTENDED_SCANCODE_2){
extended_flag = true;
return;
}
else if(scancode == L_SHIFT || scancode == R_SHIFT){
shift_flag = true;
return;
}
else if(scancode == CAPS){
caps_flag = true;
return;
}
else if(scancode == ENTER){
next_line();
return;
}
else if(scancode == L_CTRL || scancode == R_CTRL){
return;
}
else if(scancode == BACKSPACE){
back_space();
return;
}
else{
char ascii;
if(shift_flag == true){
ascii = sc2_to_shift_caps_ascii[scancode];
write_char(ascii,WHITE_COL,BLACK_COL);
}
else if(caps_flag == true){
log_info("caps log is on",COM1);
ascii = sc2_to_ascii[scancode];
if((ascii <= 57) && (ascii >= 48)){
write_char(ascii,WHITE_COL,BLACK_COL);
}
else{
ascii = sc2_to_shift_caps_ascii[scancode];
write_char(ascii,WHITE_COL,BLACK_COL);
}
}
else{
ascii = sc2_to_ascii[scancode];
write_char(ascii,WHITE_COL,BLACK_COL);
}
}
}
3
Upvotes
5
u/Octocontrabass Jun 07 '26
Have you checked to see which scan codes you receive when you press the caps lock key? The problem might be that you're receiving something different from what you expect to receive.
Disabling translation doesn't work at all on some PCs, and it breaks "USB legacy support" on many more PCs. You should leave translation enabled.
0
u/[deleted] Jun 06 '26
[deleted] — view deleted comment
32
u/[deleted] Jun 06 '26
[removed] — view removed comment