summaryrefslogtreecommitdiff
path: root/driver
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-09-18 03:03:28 +0200
committerMiguel <m.i@gmx.at>2018-09-18 03:03:28 +0200
commit2d91384197847a7e8fe2c3f548918a8277d3086d (patch)
tree7c93404e290a0ffbdaf9a8a94766d7bd0fd6e4f2 /driver
parent06e6e427c76bdb88a7f72dd04411d95a4bda3270 (diff)
sysfs, errno, improve foolshell, etc
Diffstat (limited to 'driver')
-rw-r--r--driver/keyboard.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/driver/keyboard.c b/driver/keyboard.c
index d276f51..61b8e5f 100644
--- a/driver/keyboard.c
+++ b/driver/keyboard.c
@@ -11,10 +11,10 @@ static bool shift_r=false;
static bool capslock=false;
static uint32_t kb_stream;
+static char num_syms[]={')','!','@','#','$','%','^','&','*','('};
static void put(uint8_t c)
{
- klog("%c",c);
syscall_write(kb_stream,(char *)&c,1);
}
@@ -25,6 +25,7 @@ void keyboard_init(uint32_t s)
void keyboard_handle(uint8_t in)
{
+ // klog("kb_in 0x%x",in);
uint8_t make_alpha[]={
0x1e, // A
0x30, // B
@@ -143,6 +144,7 @@ void keyboard_handle(uint8_t in)
if(break_slash==in)
{
ascii='/';
+ if(shift_l||shift_r||capslock) ascii='?';
match=true;
}
else if(break_key_space==in)
@@ -153,31 +155,43 @@ void keyboard_handle(uint8_t in)
else if(in==0xB4)
{
ascii='.';
+ if(shift_l||shift_r||capslock) ascii='<';
match=true;
}
else if(in==0xB3)
{
ascii=',';
+ if(shift_l||shift_r||capslock) ascii='>';
match=true;
}
else if(in==0x8D)
{
- ascii='+';
+ ascii='=';
+ if(shift_l||shift_r||capslock) ascii='+';
match=true;
}
else if(in==0x8C)
{
ascii='-';
+ if(shift_l||shift_r||capslock) ascii='_';
match=true;
}
else if(in==0x9A)
{
ascii='[';
+ if(shift_l||shift_r||capslock) ascii='{';
match=true;
}
else if(in==0x9B)
{
ascii=']';
+ if(shift_l||shift_r||capslock) ascii='}';
+ match=true;
+ }
+ else if(in==0xab)
+ {
+ ascii='\\';
+ if(shift_l||shift_r||capslock) ascii='|';
match=true;
}
else if(break_key_backspace==in)
@@ -198,7 +212,7 @@ void keyboard_handle(uint8_t in)
}
else if(break_key_tab==in)
{
- ascii=0x09;
+ ascii='\t';
match=true;
}
@@ -223,6 +237,10 @@ void keyboard_handle(uint8_t in)
if(break_num[i]==in)
{
ascii=('0'+i);
+ if(shift_l||shift_r||capslock) // capslock makes trouble :(
+ {
+ ascii=num_syms[i];
+ }
match=true;
break;
}