Takuya Urakawa
/
USBCopyPasteKey
mbed Advent Calendar 2014 day 8 (http://www.adventar.org/calendars/523)
main.cpp@0:23d012049941, 2014-12-08 (annotated)
- Committer:
- hsgw
- Date:
- Mon Dec 08 12:31:18 2014 +0000
- Revision:
- 0:23d012049941
1st commit
Who changed what in which revision?
User | Revision | Line number | New 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 | } |