Skip to content
Permalink
master
Go to file
 
 
Cannot retrieve contributors at this time
174 lines (161 sloc) 3.41 KB
#include "compiler.h"
#include "types.h"
#include "kbd.h"
static s8 old_frame[8];
bool frame_compare(u8 data) {
u8 i;
for( i = 2; i < 8; i++ )
if( old_frame[ i ] == data )
return( true );
return( false );
}
extern void set_old_frame(const s8 *data) {
u8 i;
for(i = 2; i<8; i++)
old_frame[i] = data[i];
}
u8 hid_to_ascii_raw(u8 data) {
if( data >= 0x1e && data <= 0x27 ) {
if( data == 0x27 ) { //zero
return( 0x30 );
}
else {
return( data + 0x13 );
}
}
else if( data >= 0x04 && data <= 0x1d ) {
return( data + 0x3d );
}
return 0;
}
u8 hid_to_ascii(u8 data, u8 mod) {
/* upper row of the keyboard, numbers and special symbols */
if( data >= 0x1e && data <= 0x27 ) {
// shift key pressed
if(mod & SHIFT) {
switch( data ) {
case BANG: return( 0x21 );
case AT: return( 0x40 );
case POUND: return( 0x23 );
case DOLLAR: return( 0x24 );
case PERCENT: return( 0x25 );
case CAP: return( 0x5e );
case AND: return( 0x26 );
case STAR: return( 0x2a );
case OPENBKT: return( 0x28 );
case CLOSEBKT: return( 0x29 );
}
}
// numbers
else {
if( data == 0x27 ) { //zero
return( 0x30 );
}
else {
return( data + 0x13 );
}
}
}
/* number pad. Arrows are not supported */
// if(( data >= 0x59 && data <= 0x61 ) && ( numLock == true )) { // numbers 1-9
// return( data - 0x28 );
// }
// if(( data == 0x62 ) && ( numLock == true )) { //zero
// return( 0x30 );
// }
/* Letters a-z */
if( data >= 0x04 && data <= 0x1d ) {
// if((( capsLock == true ) && ( mod & SHIFT ) == 0 ) || (( capsLock == false ) && ( mod & SHIFT ))) { //upper case
return( data + 0x3d );
// }
// else { //lower case
// return( data + 0x5d );
// }
}
/* Other special symbols */
if( data >= 0x2c && data <= 0x38 ) {
switch( data ) {
case SPACE: return( 0x20 );
case HYPHEN:
if(( mod & SHIFT ) == false ) {
return( 0x2d );
}
else {
return( 0x5f );
}
case EQUAL:
if(( mod & SHIFT ) == false ) {
return( 0x3d );
}
else {
return( 0x2b );
}
case SQBKTOPEN:
if(( mod & SHIFT ) == false ) {
return( 0x5b );
}
else {
return( 0x7b );
}
case SQBKTCLOSE:
if(( mod & SHIFT ) == false ) {
return( 0x5d );
}
else {
return( 0x7d );
}
case BACKSLASH:
if(( mod & SHIFT ) == false ) {
return( 0x5c );
}
else {
return( 0x7c );
}
case SEMICOLON:
if(( mod & SHIFT ) == false ) {
return( 0x3b );
}
else {
return( 0x3a );
}
case INVCOMMA:
if(( mod & SHIFT ) == false ) {
return( 0x27 );
}
else {
return( 0x22 );
}
case TILDE:
if(( mod & SHIFT ) == false ) {
return( 0x60 );
}
else {
return( 0x7e );
}
case COMMA:
if(( mod & SHIFT ) == false ) {
return( 0x2c );
}
else {
return( 0x3c );
}
case PERIOD:
if(( mod & SHIFT ) == false ) {
return( 0x2e );
}
else {
return( 0x3e );
}
case FRONTSLASH:
if(( mod & SHIFT ) == false ) {
return( 0x2f );
}
else {
return( 0x3f );
}
default:
break;
}
}
return( 0 );
}