bruce chan
/
send_online_version_3
keyboard
main.cpp@0:6e42a1ce0351, 2017-12-15 (annotated)
- Committer:
- bruce_0205
- Date:
- Fri Dec 15 12:44:52 2017 +0000
- Revision:
- 0:6e42a1ce0351
h
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
bruce_0205 | 0:6e42a1ce0351 | 1 | #include "mbed.h" |
bruce_0205 | 0:6e42a1ce0351 | 2 | #include "USBKeyboard.h" |
bruce_0205 | 0:6e42a1ce0351 | 3 | |
bruce_0205 | 0:6e42a1ce0351 | 4 | //LED1: NUM_LOCK, LED2: CAPS_LOCK, LED3: SCROLL_LOCK |
bruce_0205 | 0:6e42a1ce0351 | 5 | BusOut leds(LED1, LED2, LED3); //keyboard on/off set |
bruce_0205 | 0:6e42a1ce0351 | 6 | DigitalIn start(PTC1); // Configure SW2 pin as input function is start |
bruce_0205 | 0:6e42a1ce0351 | 7 | DigitalIn stop(PTB17); // Configure SW3 pin as input function is stop |
bruce_0205 | 0:6e42a1ce0351 | 8 | USBKeyboard keyboard; |
bruce_0205 | 0:6e42a1ce0351 | 9 | Serial pc(USBTX, USBRX); |
bruce_0205 | 0:6e42a1ce0351 | 10 | |
bruce_0205 | 0:6e42a1ce0351 | 11 | #define amount 5 |
bruce_0205 | 0:6e42a1ce0351 | 12 | #define delay_MAX_bit 3 |
bruce_0205 | 0:6e42a1ce0351 | 13 | |
bruce_0205 | 0:6e42a1ce0351 | 14 | void user_button_send(char [],int []); //send keyboard key |
bruce_0205 | 0:6e42a1ce0351 | 15 | void user_button_input(char [],int []); //client software inupt keyboard key and delay |
bruce_0205 | 0:6e42a1ce0351 | 16 | |
bruce_0205 | 0:6e42a1ce0351 | 17 | long int timer = 0; |
bruce_0205 | 0:6e42a1ce0351 | 18 | |
bruce_0205 | 0:6e42a1ce0351 | 19 | int main() { |
bruce_0205 | 0:6e42a1ce0351 | 20 | char user_button_key[amount]; //user input key |
bruce_0205 | 0:6e42a1ce0351 | 21 | int user_button_delay[amount]; //user input key delay time |
bruce_0205 | 0:6e42a1ce0351 | 22 | |
bruce_0205 | 0:6e42a1ce0351 | 23 | while (!keyboard.configured()) { // wait until keyboard is configured |
bruce_0205 | 0:6e42a1ce0351 | 24 | } |
bruce_0205 | 0:6e42a1ce0351 | 25 | |
bruce_0205 | 0:6e42a1ce0351 | 26 | while (1) { |
bruce_0205 | 0:6e42a1ce0351 | 27 | leds = keyboard.lockStatus(); //open keyboard |
bruce_0205 | 0:6e42a1ce0351 | 28 | |
bruce_0205 | 0:6e42a1ce0351 | 29 | if(pc.readable()){ |
bruce_0205 | 0:6e42a1ce0351 | 30 | user_button_input(user_button_key,user_button_delay); |
bruce_0205 | 0:6e42a1ce0351 | 31 | } |
bruce_0205 | 0:6e42a1ce0351 | 32 | |
bruce_0205 | 0:6e42a1ce0351 | 33 | if(start.read() == 0){ //wait SW2 button press |
bruce_0205 | 0:6e42a1ce0351 | 34 | while(stop.read() != 0){ //wait SW3 button press |
bruce_0205 | 0:6e42a1ce0351 | 35 | user_button_send(user_button_key,user_button_delay); |
bruce_0205 | 0:6e42a1ce0351 | 36 | timer++; |
bruce_0205 | 0:6e42a1ce0351 | 37 | for(double i=0;i<1;i=i+0.1){ //count 1 second time and wait SW3 button press |
bruce_0205 | 0:6e42a1ce0351 | 38 | if(stop.read() == 0) break; |
bruce_0205 | 0:6e42a1ce0351 | 39 | wait(0.1); |
bruce_0205 | 0:6e42a1ce0351 | 40 | } |
bruce_0205 | 0:6e42a1ce0351 | 41 | } |
bruce_0205 | 0:6e42a1ce0351 | 42 | timer = 0; |
bruce_0205 | 0:6e42a1ce0351 | 43 | } |
bruce_0205 | 0:6e42a1ce0351 | 44 | } |
bruce_0205 | 0:6e42a1ce0351 | 45 | } |
bruce_0205 | 0:6e42a1ce0351 | 46 | |
bruce_0205 | 0:6e42a1ce0351 | 47 | void user_button_send(char key[],int delay[]){ |
bruce_0205 | 0:6e42a1ce0351 | 48 | for(int i=0;i<amount;i++){ |
bruce_0205 | 0:6e42a1ce0351 | 49 | if((timer%delay[i]) == 0) |
bruce_0205 | 0:6e42a1ce0351 | 50 | keyboard._putc(key[i]); |
bruce_0205 | 0:6e42a1ce0351 | 51 | } |
bruce_0205 | 0:6e42a1ce0351 | 52 | } |
bruce_0205 | 0:6e42a1ce0351 | 53 | |
bruce_0205 | 0:6e42a1ce0351 | 54 | void user_button_input(char input_key[],int input_delay[]){ |
bruce_0205 | 0:6e42a1ce0351 | 55 | char client_input_char[delay_MAX_bit]; |
bruce_0205 | 0:6e42a1ce0351 | 56 | int client_input_char_count = 0 , bit_count = 1 , bit_set; |
bruce_0205 | 0:6e42a1ce0351 | 57 | |
bruce_0205 | 0:6e42a1ce0351 | 58 | for(int i =0;i<delay_MAX_bit;i++){ |
bruce_0205 | 0:6e42a1ce0351 | 59 | if(i > 0) |
bruce_0205 | 0:6e42a1ce0351 | 60 | bit_count = bit_count * 10; |
bruce_0205 | 0:6e42a1ce0351 | 61 | } |
bruce_0205 | 0:6e42a1ce0351 | 62 | |
bruce_0205 | 0:6e42a1ce0351 | 63 | bit_set = bit_count; |
bruce_0205 | 0:6e42a1ce0351 | 64 | |
bruce_0205 | 0:6e42a1ce0351 | 65 | for(int i=0;i<amount;i++){ //receive key value |
bruce_0205 | 0:6e42a1ce0351 | 66 | input_key[i] = pc.getc(); |
bruce_0205 | 0:6e42a1ce0351 | 67 | if(input_key[i] == '0') |
bruce_0205 | 0:6e42a1ce0351 | 68 | input_key[i] = NULL; |
bruce_0205 | 0:6e42a1ce0351 | 69 | } |
bruce_0205 | 0:6e42a1ce0351 | 70 | |
bruce_0205 | 0:6e42a1ce0351 | 71 | for(int i=0;i<amount;i++){ //receive delay value |
bruce_0205 | 0:6e42a1ce0351 | 72 | for(int j=0;j<delay_MAX_bit;j++){ |
bruce_0205 | 0:6e42a1ce0351 | 73 | client_input_char[j] = pc.getc(); |
bruce_0205 | 0:6e42a1ce0351 | 74 | client_input_char_count = client_input_char_count + (client_input_char[j] - '0') * bit_count; |
bruce_0205 | 0:6e42a1ce0351 | 75 | bit_count = bit_count / 10; |
bruce_0205 | 0:6e42a1ce0351 | 76 | } |
bruce_0205 | 0:6e42a1ce0351 | 77 | |
bruce_0205 | 0:6e42a1ce0351 | 78 | input_delay[i] = client_input_char_count; |
bruce_0205 | 0:6e42a1ce0351 | 79 | client_input_char_count = 0; |
bruce_0205 | 0:6e42a1ce0351 | 80 | bit_count = bit_set; |
bruce_0205 | 0:6e42a1ce0351 | 81 | } |
bruce_0205 | 0:6e42a1ce0351 | 82 | } |