Advertisement
michalmonday

Malduino Elite (serial input instead of SD card)

Oct 3rd, 2018
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.00 KB | None | 0 0
  1.  
  2. /*
  3.   ==============================================================
  4.     Copyright (c) 2017 Seytonic, Spacehuhn (Licensed under MIT)
  5.       For more information see: github.com/seytonic/malduino
  6.   ==============================================================
  7. */
  8.  
  9. #include <SPI.h>
  10. #include <SD.h>
  11. #include "Keyboard.h"
  12. #include "Mouse.h"
  13.  
  14. #define debug // <-- uncomment to turn serial output on
  15. #define CSpin 4 //Chip-Select of the SD-Card reader
  16. #define ledPin 3
  17. #define blinkInterval 50
  18.  
  19. //Dip-Switch Pins:
  20. #define dip1 6
  21. #define dip2 8
  22. #define dip3 9
  23. #define dip4 10
  24.  
  25. #define buffersize 128
  26.  
  27. #define KEYPAD_0 234
  28. #define KEYPAD_1 225
  29. #define KEYPAD_2 226
  30. #define KEYPAD_3 227
  31. #define KEYPAD_4 228
  32. #define KEYPAD_5 229
  33. #define KEYPAD_6 230
  34. #define KEYPAD_7 231
  35. #define KEYPAD_8 232
  36. #define KEYPAD_9 233
  37. #define KEYPAD_ASTERIX 221
  38. #define KEYPAD_ENTER 224
  39. #define KEYPAD_MINUS 222
  40. #define KEYPAD_PERIOD 235
  41. #define KEYPAD_PLUS 223
  42. #define KEYPAD_SLASH 220
  43. #define PRINTSCREEN 206
  44.  
  45. #define payload Serial
  46.  
  47. char* buf = malloc(sizeof(char)*buffersize);
  48. char* repeatBuffer = malloc(sizeof(char)*12);
  49.  
  50. int bufSize = 0;
  51. int defaultDelay = 5;
  52. int defaultCharDelay = 5;
  53. bool ledOn = true;
  54. int rMin = -100;
  55. int rMax = 100;
  56.  
  57.  
  58. int getSpace(int start, int end){
  59.   for(int i=start;i<end;i++){
  60.     if(buf[i] == ' ') return i;
  61.   }
  62.   return -1;
  63. }
  64.  
  65. bool equals(char* strA, int start, int end, char* strB, int strLen){
  66.   if(end-start != strLen) return false;
  67.   for(int i=0;i<strLen;i++){
  68.     if(strA[start+i] != strB[i]) return false;
  69.   }
  70.   return true;
  71. }
  72.  
  73. int toPositive(int num){
  74.   if(num < 0) return num*(-1);
  75.   else return num;
  76. }
  77.  
  78. bool equalsBuffer(int start, int end, char* str){ return equals(buf, start, end, str, String(str).length()); }
  79.  
  80. int getInt(char* str, int pos){
  81.   if(equals(str, pos+1, pos+7, "RANDOM", 6)){
  82.     return random(rMin, rMax);
  83.   }else{
  84.     return String(str).substring(pos+1,pos+6).toInt();
  85.   }
  86. }
  87.  
  88. void KeyboardWrite(uint8_t c){
  89.   Keyboard.press(c);
  90.   delay(defaultCharDelay);
  91.   Keyboard.release(c);
  92. }
  93.  
  94. void runLine(){
  95.   #ifdef debug
  96.     Serial.println("run: '"+String(buf).substring(0,bufSize)+"' ("+(String)bufSize+")");
  97.   #endif
  98.  
  99.   int space = getSpace(0,bufSize);
  100.  
  101.   if(space == -1) runCommand(0,bufSize);
  102.   else{
  103.     if(equalsBuffer(0,space,"DEFAULTDELAY") || equalsBuffer(0,space,"DEFAULT_DELAY")) defaultDelay = getInt(buf,space);
  104.     else if(equalsBuffer(0,space,"DEFAULTCHARDELAY") || equalsBuffer(0,space,"DEFAULT_CHAR_DELAY")) defaultCharDelay = getInt(buf,space);
  105.     else if(equalsBuffer(0,space,"DELAY")) delay(getInt(buf,space));
  106.     else if(equalsBuffer(0,space,"STRING")){
  107.       for(int i=space+1;i<bufSize;i++) KeyboardWrite(buf[i]);
  108.     }
  109.     else if(equalsBuffer(0,space,"MOUSE")){
  110.       int nSpace = getSpace(space+1,bufSize);
  111.       int x = getInt(buf,space);
  112.       int y = getInt(buf,nSpace);
  113.       Mouse.move(x,y);
  114.       #ifdef debug
  115.         Serial.println("Move mouse "+(String)x+" "+(String)y);
  116.       #endif
  117.     }
  118.     else if(equalsBuffer(0,space,"SCROLL")) Mouse.move(0,0,getInt(buf,space));
  119.     else if(equalsBuffer(0,space,"RANDOMMIN")) rMin = getInt(buf,space);
  120.     else if(equalsBuffer(0,space,"RANDOMMAX")) rMax = getInt(buf,space);
  121.     else if(equalsBuffer(0,space,"REM") || equalsBuffer(0,space,"REPEAT")){}
  122.     else{
  123.       runCommand(0,space);
  124.       while(space >= 0 && space < bufSize){
  125.         int nSpace = getSpace(space+1,bufSize);
  126.         if(nSpace == -1) nSpace = bufSize;
  127.         runCommand(space+1,nSpace);
  128.         space = nSpace;
  129.       }
  130.     }
  131.   }
  132.  
  133.   Keyboard.releaseAll();
  134.   delay(defaultDelay);
  135. }
  136.  
  137. void runCommand(int s, int e){
  138.  
  139.   #ifdef debug
  140.     Serial.println("Press '"+String(buf).substring(s,e)+"'");
  141.   #endif
  142.  
  143.   if(e - s < 2) Keyboard.press(buf[s]);
  144.   else if(equalsBuffer(s,e,"ENTER")) Keyboard.press(KEY_RETURN);
  145.   else if(equalsBuffer(s,e,"GUI") || equalsBuffer(s,e,"WINDOWS")) Keyboard.press(KEY_LEFT_GUI);
  146.   else if(equalsBuffer(s,e,"SHIFT")) Keyboard.press(KEY_LEFT_SHIFT);
  147.   else if(equalsBuffer(s,e,"ALT")  ||equalsBuffer(s,e,"ALT_LEFT") ||equalsBuffer(s,e,"ALTLEFT")) Keyboard.press(KEY_LEFT_ALT);
  148.   else if(equalsBuffer(s,e,"ALT_RIGHT") ||equalsBuffer(s,e,"ALTRIGHT")) Keyboard.press(KEY_RIGHT_ALT);
  149.   else if(equalsBuffer(s,e,"CTRL") || equalsBuffer(s,e,"CONTROL")) Keyboard.press(KEY_LEFT_CTRL);
  150.   else if(equalsBuffer(s,e,"CAPSLOCK")) Keyboard.press(KEY_CAPS_LOCK);
  151.   else if(equalsBuffer(s,e,"DELETE")) Keyboard.press(KEY_DELETE);
  152.   else if(equalsBuffer(s,e,"END")) Keyboard.press(KEY_END);
  153.   else if(equalsBuffer(s,e,"ESC") || equalsBuffer(s,e,"ESCAPE")) Keyboard.press(KEY_ESC);
  154.   else if(equalsBuffer(s,e,"HOME")) Keyboard.press(KEY_HOME);
  155.   else if(equalsBuffer(s,e,"INSERT")) Keyboard.press(KEY_INSERT);
  156.   else if(equalsBuffer(s,e,"PAGEUP")) Keyboard.press(KEY_PAGE_UP);
  157.   else if(equalsBuffer(s,e,"PAGEDOWN")) Keyboard.press(KEY_PAGE_DOWN);
  158.   else if(equalsBuffer(s,e,"SPACE")) Keyboard.press(' ');
  159.   else if(equalsBuffer(s,e,"TAB")) Keyboard.press(KEY_TAB);
  160.   else if(equalsBuffer(s,e,"BACKSPACE")) Keyboard.press(KEY_BACKSPACE);
  161.  
  162.   else if(equalsBuffer(s,e,"UP") || equalsBuffer(s,e,"UPARROW")) Keyboard.press(KEY_UP_ARROW);
  163.   else if(equalsBuffer(s,e,"DOWN") || equalsBuffer(s,e,"DOWNARROW")) Keyboard.press(KEY_DOWN_ARROW);
  164.   else if(equalsBuffer(s,e,"LEFT") || equalsBuffer(s,e,"LEFTARROW")) Keyboard.press(KEY_LEFT_ARROW);
  165.   else if(equalsBuffer(s,e,"RIGHT") || equalsBuffer(s,e,"RIGHTARROW")) Keyboard.press(KEY_RIGHT_ARROW);
  166.  
  167.   else if(equalsBuffer(s,e,"PRINTSCREEN")) Keyboard.press(PRINTSCREEN);
  168.  
  169.   else if(equalsBuffer(s,e,"F1")) Keyboard.press(KEY_F1);
  170.   else if(equalsBuffer(s,e,"F2")) Keyboard.press(KEY_F2);
  171.   else if(equalsBuffer(s,e,"F3")) Keyboard.press(KEY_F3);
  172.   else if(equalsBuffer(s,e,"F4")) Keyboard.press(KEY_F4);
  173.   else if(equalsBuffer(s,e,"F5")) Keyboard.press(KEY_F5);
  174.   else if(equalsBuffer(s,e,"F6")) Keyboard.press(KEY_F6);
  175.   else if(equalsBuffer(s,e,"F7")) Keyboard.press(KEY_F7);
  176.   else if(equalsBuffer(s,e,"F8")) Keyboard.press(KEY_F8);
  177.   else if(equalsBuffer(s,e,"F9")) Keyboard.press(KEY_F9);
  178.   else if(equalsBuffer(s,e,"F10")) Keyboard.press(KEY_F10);
  179.   else if(equalsBuffer(s,e,"F11")) Keyboard.press(KEY_F11);
  180.   else if(equalsBuffer(s,e,"F12")) Keyboard.press(KEY_F12);
  181.  
  182.   else if(equalsBuffer(s,e,"NUM_0")) KeyboardWrite(KEYPAD_0);
  183.   else if(equalsBuffer(s,e,"NUM_1")) KeyboardWrite(KEYPAD_1);
  184.   else if(equalsBuffer(s,e,"NUM_2")) KeyboardWrite(KEYPAD_2);
  185.   else if(equalsBuffer(s,e,"NUM_3")) KeyboardWrite(KEYPAD_3);
  186.   else if(equalsBuffer(s,e,"NUM_4")) KeyboardWrite(KEYPAD_4);
  187.   else if(equalsBuffer(s,e,"NUM_5")) KeyboardWrite(KEYPAD_5);
  188.   else if(equalsBuffer(s,e,"NUM_6")) KeyboardWrite(KEYPAD_6);
  189.   else if(equalsBuffer(s,e,"NUM_7")) KeyboardWrite(KEYPAD_7);
  190.   else if(equalsBuffer(s,e,"NUM_8")) KeyboardWrite(KEYPAD_8);
  191.   else if(equalsBuffer(s,e,"NUM_9")) KeyboardWrite(KEYPAD_9);
  192.   else if(equalsBuffer(s,e,"NUM_ASTERIX")) KeyboardWrite(KEYPAD_ASTERIX);
  193.   else if(equalsBuffer(s,e,"NUM_ENTER")) KeyboardWrite(KEYPAD_ENTER);
  194.   else if(equalsBuffer(s,e,"NUM_Minus")) KeyboardWrite(KEYPAD_MINUS);
  195.   else if(equalsBuffer(s,e,"NUM_PERIOD")) KeyboardWrite(KEYPAD_PERIOD);
  196.   else if(equalsBuffer(s,e,"NUM_PLUS")) KeyboardWrite(KEYPAD_PLUS);
  197.  
  198.   else if(equalsBuffer(s,e,"CLICK")  || equalsBuffer(s,e,"CLICK_LEFT") || equalsBuffer(s,e,"MOUSECLICK")) Mouse.click();
  199.   else if(equalsBuffer(s,e,"CLICK_RIGHT")) Mouse.click(MOUSE_RIGHT);
  200.   else if(equalsBuffer(s,e,"CLICK_MIDDLE")) Mouse.click(MOUSE_MIDDLE);
  201.  
  202.   else if(equalsBuffer(s,e,"PRESS") || equalsBuffer(s,e,"PRESS_LEFT")) Mouse.press();
  203.   else if(equalsBuffer(s,e,"PRESS_LEFT")) Mouse.press(MOUSE_RIGHT);
  204.   else if(equalsBuffer(s,e,"PRESS_MIDDLE")) Mouse.press(MOUSE_MIDDLE);
  205.   else if(equalsBuffer(s,e,"RELEASE") || equalsBuffer(s,e,"RELEASE_LEFT")) Mouse.release();
  206.   else if(equalsBuffer(s,e,"RELEASE_LEFT")) Mouse.release(MOUSE_RIGHT);
  207.   else if(equalsBuffer(s,e,"RELEASE_MIDDLE")) Mouse.release(MOUSE_MIDDLE);
  208.  
  209. #ifdef debug
  210.   else Serial.println("failed to find command");
  211. #endif
  212.   /* not implemented
  213.   else if(equalsBuffer(s,e,"APP")) Keyboard.press();
  214.   else if(equalsBuffer(s,e,"MENU")) Keyboard.press();
  215.   else if(equalsBuffer(s,e,"BREAK") || equalsBuffer(s,e,"PAUSE",5)) Keyboard.press();
  216.   else if(equalsBuffer(s,e,"NUMLOCK")) Keyboard.press();
  217.   else if(equalsBuffer(s,e,"SCROLLLOCK")) Keyboard.press();
  218.   */
  219. }
  220.  
  221. void setup() {
  222.   /*
  223.   #ifdef debug
  224.     Serial.begin(115200);
  225.     delay(2000);
  226.     Serial.println("Started!");
  227.   #endif
  228. */
  229. Serial.begin(115200);
  230. delay(5000);
  231. Serial.println("Started!");
  232.   randomSeed(analogRead(0));
  233.  
  234.  
  235.  
  236.     Keyboard.begin();
  237.     Mouse.begin();  
  238.  
  239. }
  240.  
  241. void loop() {
  242.  
  243.       while(payload.available()){
  244.  
  245.       buf[bufSize] = payload.read();
  246.       if(buf[bufSize] == '\r' || buf[bufSize] == '\n' || bufSize >= buffersize){
  247.         if(buf[bufSize] == '\r' && payload.peek() == '\n') payload.read();
  248.  
  249.         runLine();
  250.         bufSize = 0;
  251.       }
  252.       else bufSize++;
  253.     }
  254.     if(bufSize > 0){
  255.       runLine();
  256.       bufSize = 0;
  257.     }
  258. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement