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

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?

UserRevisionLine numberNew 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 }