mbed Advent Calendar 2014 day 8 (http://www.adventar.org/calendars/523)

Dependencies:   USBDevice mbed

Committer:
hsgw
Date:
Mon Dec 08 12:31:18 2014 +0000
Revision:
0:23d012049941
1st commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hsgw 0:23d012049941 1 /**
hsgw 0:23d012049941 2 * USB COPY&PASTE Keyboard
hsgw 0:23d012049941 3 *
hsgw 0:23d012049941 4 * This is a USB keyboard device for copy&paste freak.
hsgw 0:23d012049941 5 * http://www.dm9records.com/index.php?cID=144
hsgw 0:23d012049941 6 *
hsgw 0:23d012049941 7 * @author hsgw(http://twitter.com/hsgw)
hsgw 0:23d012049941 8 * @since 2014/12/08
hsgw 0:23d012049941 9 */
hsgw 0:23d012049941 10
hsgw 0:23d012049941 11 #include "mbed.h"
hsgw 0:23d012049941 12 #include "USBKeyboard.h"
hsgw 0:23d012049941 13 #include "PinDetect.h"
hsgw 0:23d012049941 14
hsgw 0:23d012049941 15 // SW Pin Setting
hsgw 0:23d012049941 16 #define SW_SELECT_ALL D2
hsgw 0:23d012049941 17 #define SW_COPY D3
hsgw 0:23d012049941 18 #define SW_PASTE D4
hsgw 0:23d012049941 19
hsgw 0:23d012049941 20 USBKeyboard keyboard;
hsgw 0:23d012049941 21
hsgw 0:23d012049941 22 PinDetect swSelectAll(SW_SELECT_ALL);
hsgw 0:23d012049941 23 PinDetect swCopy(SW_COPY);
hsgw 0:23d012049941 24 PinDetect swPaste(SW_PASTE);
hsgw 0:23d012049941 25
hsgw 0:23d012049941 26 DigitalOut ledSelectAll(LED_RED);
hsgw 0:23d012049941 27 DigitalOut ledCopy(LED_GREEN);
hsgw 0:23d012049941 28 DigitalOut ledPaste(LED_BLUE);
hsgw 0:23d012049941 29
hsgw 0:23d012049941 30 bool selectSwState = false;
hsgw 0:23d012049941 31 bool copySwState = false;
hsgw 0:23d012049941 32 bool pasteSwState = false;
hsgw 0:23d012049941 33
hsgw 0:23d012049941 34 unsigned int pressedSelectCount = 0;
hsgw 0:23d012049941 35 unsigned int pressedCopyCount = 0;
hsgw 0:23d012049941 36 unsigned int pressedPasteCount = 0;
hsgw 0:23d012049941 37
hsgw 0:23d012049941 38 // callback for pressed sw
hsgw 0:23d012049941 39 void pressedSelectAll()
hsgw 0:23d012049941 40 {
hsgw 0:23d012049941 41 ledSelectAll = 0;
hsgw 0:23d012049941 42 selectSwState = true;
hsgw 0:23d012049941 43 }
hsgw 0:23d012049941 44
hsgw 0:23d012049941 45 void pressedCopy()
hsgw 0:23d012049941 46 {
hsgw 0:23d012049941 47 ledCopy = 0;
hsgw 0:23d012049941 48 copySwState = true;
hsgw 0:23d012049941 49 }
hsgw 0:23d012049941 50
hsgw 0:23d012049941 51 void pressedPaste()
hsgw 0:23d012049941 52 {
hsgw 0:23d012049941 53 ledPaste = 0;
hsgw 0:23d012049941 54 pasteSwState = true;
hsgw 0:23d012049941 55 }
hsgw 0:23d012049941 56
hsgw 0:23d012049941 57 int main(void)
hsgw 0:23d012049941 58 {
hsgw 0:23d012049941 59 // leds off
hsgw 0:23d012049941 60 ledSelectAll = 1;
hsgw 0:23d012049941 61 ledCopy = 1;
hsgw 0:23d012049941 62 ledPaste = 1;
hsgw 0:23d012049941 63
hsgw 0:23d012049941 64 // set pin mode to internal PullUp
hsgw 0:23d012049941 65 swSelectAll.mode(PullUp);
hsgw 0:23d012049941 66 swCopy.mode(PullUp);
hsgw 0:23d012049941 67 swPaste.mode(PullUp);
hsgw 0:23d012049941 68
hsgw 0:23d012049941 69 // attach callback when sw pressed(detecting change of state 1->0)
hsgw 0:23d012049941 70 swSelectAll.attach_deasserted(&pressedSelectAll);
hsgw 0:23d012049941 71 swCopy.attach_deasserted(&pressedCopy);
hsgw 0:23d012049941 72 swPaste.attach_deasserted(&pressedPaste);
hsgw 0:23d012049941 73
hsgw 0:23d012049941 74 // begin sampling switches
hsgw 0:23d012049941 75 swSelectAll.setSampleFrequency();
hsgw 0:23d012049941 76 swCopy.setSampleFrequency();
hsgw 0:23d012049941 77 swPaste.setSampleFrequency();
hsgw 0:23d012049941 78
hsgw 0:23d012049941 79 printf("USB COPY&PASTE Keyboard start!\n");
hsgw 0:23d012049941 80 while(1) {
hsgw 0:23d012049941 81 if(selectSwState) {
hsgw 0:23d012049941 82 pressedSelectCount++;
hsgw 0:23d012049941 83 printf("pressed select: %dtimes\n",pressedSelectCount);
hsgw 0:23d012049941 84 keyboard.keyCode('a', KEY_CTRL); // send ctrl+a
hsgw 0:23d012049941 85 selectSwState = false;
hsgw 0:23d012049941 86 ledSelectAll = 1;
hsgw 0:23d012049941 87 }
hsgw 0:23d012049941 88 if(copySwState) {
hsgw 0:23d012049941 89 pressedCopyCount++;
hsgw 0:23d012049941 90 printf("pressed copy: %dtimes\n",pressedCopyCount);
hsgw 0:23d012049941 91 keyboard.keyCode('c', KEY_CTRL); // send ctrl+c
hsgw 0:23d012049941 92 copySwState = false;
hsgw 0:23d012049941 93 ledCopy = 1;
hsgw 0:23d012049941 94 }
hsgw 0:23d012049941 95 if(pasteSwState) {
hsgw 0:23d012049941 96 pressedPasteCount++;
hsgw 0:23d012049941 97 printf("pressed paste: %dtimes\n",pressedPasteCount);
hsgw 0:23d012049941 98 keyboard.keyCode('v', KEY_CTRL); // send ctrl+v
hsgw 0:23d012049941 99 pasteSwState = false;
hsgw 0:23d012049941 100 ledPaste = 1;
hsgw 0:23d012049941 101 }
hsgw 0:23d012049941 102 }
hsgw 0:23d012049941 103 }