
Sends infinity hotkey combinations (Current: LCTRL + RALT + NUM) Cycles numbers 0 to 9 with gaps of 10 seconds.
Dependencies: mbed C12832 USBDevice
Dependents: mbed_alif4000_hotkeys_3chan_001
main.cpp@4:6bf4cdb7b834, 2019-06-03 (annotated)
- Committer:
- stevehousley
- Date:
- Mon Jun 03 14:38:07 2019 +0000
- Revision:
- 4:6bf4cdb7b834
- Parent:
- 3:e2f13978838c
- Child:
- 5:fc7f3f5f4c2d
For use with Ronnie units
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
shivikas | 0:f4e0c6f139ea | 1 | /**************************************************************************** |
stevehousley | 4:6bf4cdb7b834 | 2 | - Following program is to emulate Infinity channel switching. |
shivikas | 0:f4e0c6f139ea | 3 | - embeds are used to send hotkey combination to switch channel. |
shivikas | 0:f4e0c6f139ea | 4 | - CTRL+SHIFT+[1-4] is used to switch among four channels. |
shivikas | 0:f4e0c6f139ea | 5 | - LCD screen on mbed application board is used to show switch status and count. |
shivikas | 0:f4e0c6f139ea | 6 | |
shivikas | 0:f4e0c6f139ea | 7 | ****************************************************************************/ |
shivikas | 0:f4e0c6f139ea | 8 | |
shivikas | 0:f4e0c6f139ea | 9 | |
shivikas | 0:f4e0c6f139ea | 10 | #include "mbed.h" |
shivikas | 0:f4e0c6f139ea | 11 | #include "C12832.h" |
shivikas | 0:f4e0c6f139ea | 12 | #include "USBKeyboard.h" |
shivikas | 0:f4e0c6f139ea | 13 | |
shivikas | 0:f4e0c6f139ea | 14 | |
shivikas | 0:f4e0c6f139ea | 15 | // To change LED colour at channel switching |
shivikas | 0:f4e0c6f139ea | 16 | BusOut leds(p23, p24, p25); |
shivikas | 3:e2f13978838c | 17 | BusOut myleds(LED1, LED2, LED3, LED4); |
shivikas | 0:f4e0c6f139ea | 18 | |
shivikas | 0:f4e0c6f139ea | 19 | // keyboard interface to emulate keyboard and send keys with modifiers |
shivikas | 0:f4e0c6f139ea | 20 | USBKeyboard keyboard; |
shivikas | 0:f4e0c6f139ea | 21 | |
shivikas | 0:f4e0c6f139ea | 22 | // LCD interface on appication board |
shivikas | 0:f4e0c6f139ea | 23 | C12832 lcd(p5, p7, p6, p8, p11); |
shivikas | 0:f4e0c6f139ea | 24 | |
stevehousley | 4:6bf4cdb7b834 | 25 | // Switching period: 'every <speed> seconds' |
stevehousley | 4:6bf4cdb7b834 | 26 | const float speed = 10.0; |
shivikas | 0:f4e0c6f139ea | 27 | const int hotkeys = KEY_CTRL | KEY_SHIFT; |
stevehousley | 4:6bf4cdb7b834 | 28 | const int maxChannels = 3; |
stevehousley | 4:6bf4cdb7b834 | 29 | const int maxChSw = 60; |
stevehousley | 4:6bf4cdb7b834 | 30 | const int remainMinutesMax = 50; |
shivikas | 0:f4e0c6f139ea | 31 | |
shivikas | 0:f4e0c6f139ea | 32 | void lcd_print(int key, int count, float speed) { |
shivikas | 0:f4e0c6f139ea | 33 | lcd.cls(); |
shivikas | 0:f4e0c6f139ea | 34 | lcd.locate(0,0); |
shivikas | 0:f4e0c6f139ea | 35 | lcd.printf("Sending CTRL+SHIFT+%c \nCount: %d\nSpeed: %4.2f\n", key, count, speed); |
shivikas | 0:f4e0c6f139ea | 36 | } |
shivikas | 0:f4e0c6f139ea | 37 | |
stevehousley | 4:6bf4cdb7b834 | 38 | void lcd_print2(int rMinutes, int rMinutesMax) { |
stevehousley | 4:6bf4cdb7b834 | 39 | lcd.cls(); |
stevehousley | 4:6bf4cdb7b834 | 40 | lcd.locate(0,0); |
stevehousley | 4:6bf4cdb7b834 | 41 | lcd.printf("Idle time:\n>>> %d/%d minutes\n", rMinutes, rMinutesMax); |
stevehousley | 4:6bf4cdb7b834 | 42 | } |
stevehousley | 4:6bf4cdb7b834 | 43 | |
shivikas | 0:f4e0c6f139ea | 44 | // Start programm |
shivikas | 0:f4e0c6f139ea | 45 | int main(void) { |
shivikas | 0:f4e0c6f139ea | 46 | int key_base; |
stevehousley | 4:6bf4cdb7b834 | 47 | int count = 1; // Cumulative channel switching count |
shivikas | 0:f4e0c6f139ea | 48 | char key_modifier; |
shivikas | 0:f4e0c6f139ea | 49 | |
shivikas | 0:f4e0c6f139ea | 50 | //Disconnect any existing connections |
shivikas | 0:f4e0c6f139ea | 51 | lcd.cls(); |
shivikas | 0:f4e0c6f139ea | 52 | lcd.locate(0,0); |
shivikas | 0:f4e0c6f139ea | 53 | lcd.printf("Starting Up..\nAllowing USB to settle\n>>Please Wait<< "); |
shivikas | 0:f4e0c6f139ea | 54 | wait(10); |
stevehousley | 4:6bf4cdb7b834 | 55 | |
stevehousley | 4:6bf4cdb7b834 | 56 | // Loop forever: |
stevehousley | 4:6bf4cdb7b834 | 57 | // (1) Channel switch continuously for maxChSw in first part of hour. |
stevehousley | 4:6bf4cdb7b834 | 58 | // (2) Idle (no channel switching for remainder of hour. |
shivikas | 0:f4e0c6f139ea | 59 | while(1) { |
stevehousley | 4:6bf4cdb7b834 | 60 | |
stevehousley | 4:6bf4cdb7b834 | 61 | int chswTotal = 1; |
stevehousley | 4:6bf4cdb7b834 | 62 | |
stevehousley | 4:6bf4cdb7b834 | 63 | // (1) Channel switch continuously. |
stevehousley | 4:6bf4cdb7b834 | 64 | while(chswTotal <= maxChSw) { |
stevehousley | 4:6bf4cdb7b834 | 65 | key_base = 1; |
stevehousley | 4:6bf4cdb7b834 | 66 | while(key_base <= maxChannels) { |
stevehousley | 4:6bf4cdb7b834 | 67 | lcd.cls(); |
stevehousley | 4:6bf4cdb7b834 | 68 | leds = ~key_base; |
stevehousley | 4:6bf4cdb7b834 | 69 | myleds = key_base; |
stevehousley | 4:6bf4cdb7b834 | 70 | key_modifier = '0'+key_base; |
stevehousley | 4:6bf4cdb7b834 | 71 | keyboard.keyCode(key_modifier, hotkeys); |
stevehousley | 4:6bf4cdb7b834 | 72 | lcd_print(key_modifier, count, speed); |
stevehousley | 4:6bf4cdb7b834 | 73 | wait(speed); |
stevehousley | 4:6bf4cdb7b834 | 74 | key_base++; |
stevehousley | 4:6bf4cdb7b834 | 75 | count++; |
stevehousley | 4:6bf4cdb7b834 | 76 | chswTotal++; |
stevehousley | 4:6bf4cdb7b834 | 77 | } |
shivikas | 0:f4e0c6f139ea | 78 | } |
stevehousley | 4:6bf4cdb7b834 | 79 | |
stevehousley | 4:6bf4cdb7b834 | 80 | // (2) Idle for remainder of hour, counting up |
stevehousley | 4:6bf4cdb7b834 | 81 | // every 1 minute. |
stevehousley | 4:6bf4cdb7b834 | 82 | int remainMin = 1; |
stevehousley | 4:6bf4cdb7b834 | 83 | while(remainMin <= remainMinutesMax) { |
stevehousley | 4:6bf4cdb7b834 | 84 | lcd_print2(remainMin, remainMinutesMax); |
stevehousley | 4:6bf4cdb7b834 | 85 | wait(60.0); |
stevehousley | 4:6bf4cdb7b834 | 86 | remainMin++; |
stevehousley | 4:6bf4cdb7b834 | 87 | } |
shivikas | 0:f4e0c6f139ea | 88 | } |
shivikas | 0:f4e0c6f139ea | 89 | } |