Dependencies:   mbed

Committer:
simon
Date:
Thu Nov 12 00:51:56 2009 +0000
Revision:
0:231dc8341ad9

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
simon 0:231dc8341ad9 1 #include "PS2ASCII.h"
simon 0:231dc8341ad9 2
simon 0:231dc8341ad9 3 //===================================
simon 0:231dc8341ad9 4 //*Constructor*
simon 0:231dc8341ad9 5 //===================================
simon 0:231dc8341ad9 6
simon 0:231dc8341ad9 7 PS2ASCII::PS2ASCII(PinName data, PinName clk) : kbd(data,clk) ,_caps(false), _shift(false), _E0flag(false) ,_numlock(false)
simon 0:231dc8341ad9 8 {
simon 0:231dc8341ad9 9
simon 0:231dc8341ad9 10 }
simon 0:231dc8341ad9 11
simon 0:231dc8341ad9 12 //===================================
simon 0:231dc8341ad9 13 //Functions
simon 0:231dc8341ad9 14 //===================================
simon 0:231dc8341ad9 15
simon 0:231dc8341ad9 16 unsigned char PS2ASCII::getChar()
simon 0:231dc8341ad9 17 {
simon 0:231dc8341ad9 18 while(1)
simon 0:231dc8341ad9 19 {
simon 0:231dc8341ad9 20 _E0flag = false;
simon 0:231dc8341ad9 21 unsigned char keypress = kbd.rd(); //code in
simon 0:231dc8341ad9 22
simon 0:231dc8341ad9 23 if(keypress == 0xE0) //is it a special E0 key?
simon 0:231dc8341ad9 24 {
simon 0:231dc8341ad9 25 keypress = kbd.rd(); //next byte in
simon 0:231dc8341ad9 26 if(keypress == NULL) //is it a break code?
simon 0:231dc8341ad9 27 {
simon 0:231dc8341ad9 28 keypress = kbd.rd(); //if so chew it up and back to start
simon 0:231dc8341ad9 29
simon 0:231dc8341ad9 30 continue;
simon 0:231dc8341ad9 31 }
simon 0:231dc8341ad9 32
simon 0:231dc8341ad9 33 _E0flag = true; //tell us that it is an E0 function
simon 0:231dc8341ad9 34 return keypress;
simon 0:231dc8341ad9 35 }
simon 0:231dc8341ad9 36
simon 0:231dc8341ad9 37 if((keypress == 0x12) || (keypress == 0x59)) //SHIFT pressed?
simon 0:231dc8341ad9 38 {
simon 0:231dc8341ad9 39 _shift = true;
simon 0:231dc8341ad9 40 continue;
simon 0:231dc8341ad9 41 }
simon 0:231dc8341ad9 42
simon 0:231dc8341ad9 43 if(keypress == NULL) //gets rid of byte 1 of break code
simon 0:231dc8341ad9 44 {
simon 0:231dc8341ad9 45 keypress = kbd.rd(); //byte 2 of break code in
simon 0:231dc8341ad9 46
simon 0:231dc8341ad9 47 if((keypress == 0x12) || (keypress == 0x59))
simon 0:231dc8341ad9 48 {
simon 0:231dc8341ad9 49 _shift = false;
simon 0:231dc8341ad9 50 }
simon 0:231dc8341ad9 51 continue;
simon 0:231dc8341ad9 52 }
simon 0:231dc8341ad9 53
simon 0:231dc8341ad9 54 switch (keypress) {
simon 0:231dc8341ad9 55 case 0x58:
simon 0:231dc8341ad9 56 _caps = !_caps; //CAPS LOCK key
simon 0:231dc8341ad9 57 continue;
simon 0:231dc8341ad9 58 case 0x80:
simon 0:231dc8341ad9 59 _numlock = !_numlock;
simon 0:231dc8341ad9 60 continue;
simon 0:231dc8341ad9 61 default:
simon 0:231dc8341ad9 62 break;
simon 0:231dc8341ad9 63 }
simon 0:231dc8341ad9 64
simon 0:231dc8341ad9 65 unsigned char initial_keypress = keypress;
simon 0:231dc8341ad9 66
simon 0:231dc8341ad9 67 if(_shift == true) //if SHIFT is pressed take shifted character
simon 0:231dc8341ad9 68 {
simon 0:231dc8341ad9 69 keypress = shift_on[keypress];
simon 0:231dc8341ad9 70 }
simon 0:231dc8341ad9 71
simon 0:231dc8341ad9 72 if((_caps == true)&&(initial_keypress >= 97)&&(initial_keypress <= 127))
simon 0:231dc8341ad9 73 {
simon 0:231dc8341ad9 74 keypress = shift_on[keypress]; //if caps is on shift the letter up
simon 0:231dc8341ad9 75 }
simon 0:231dc8341ad9 76
simon 0:231dc8341ad9 77 return(keypress);
simon 0:231dc8341ad9 78
simon 0:231dc8341ad9 79 }
simon 0:231dc8341ad9 80 }
simon 0:231dc8341ad9 81
simon 0:231dc8341ad9 82 bool PS2ASCII::E0flag()
simon 0:231dc8341ad9 83 {
simon 0:231dc8341ad9 84 return _E0flag;
simon 0:231dc8341ad9 85 }
simon 0:231dc8341ad9 86
simon 0:231dc8341ad9 87 bool PS2ASCII::numlock()
simon 0:231dc8341ad9 88 {
simon 0:231dc8341ad9 89 return _numlock;
simon 0:231dc8341ad9 90 }
simon 0:231dc8341ad9 91
simon 0:231dc8341ad9 92