You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

205 line
4.6 KiB

  1. /**
  2. * @author Alex Volkmann
  3. * @date 18.02.2019
  4. * @function Das programm steuert ein relle an und macht es an oder aus
  5. */
  6. import java.io.IOException;
  7. import java.util.Arrays;
  8. import java.util.concurrent.TimeUnit;
  9. // todo: add Dokumentation
  10. public class gpio_java
  11. {
  12. public static String rel_map [][] = {
  13. {"rel1","14"},
  14. {"rel2","15"},
  15. {"rel3","18"},
  16. {"rel4","23"},
  17. {"rel5","24"},
  18. {"rel6","25"},
  19. {"rel7","8"},
  20. {"rel8","7"}
  21. };
  22. public static String [] action = {"on", "off", "status"};
  23. /** Die main-Methode ruft die Funktionen in der gegebenen Reihnfolge auf,
  24. * und gibt die @param args weiter.
  25. * @param args Commandline argument der main funktion
  26. */
  27. public static void main (String [] args)
  28. {
  29. // Zum checken der Anzahl der Argumente
  30. checkargs(args);
  31. // todo: initialisiere alle acht ports (outputs)
  32. init_gpio();
  33. // setze gpio (gemaes der parameter)
  34. gpio_getport(args[0]);
  35. gpio_cmdhandler(args[0], args[1]);
  36. return;
  37. }
  38. /** Die checkargs-Methode prüft ob zwei korrekte Argumente eingetragen wurden.
  39. * @param argumens - Commandline argument
  40. */
  41. public static void checkargs(String[] argumens)
  42. {
  43. int laenge = argumens.length;
  44. String [] h = {"-h"};
  45. int idx;
  46. boolean parameter1 = false;
  47. boolean parameter2 = false;
  48. //Prüft ob zwei args angegeben wurden.
  49. if (laenge == 2)
  50. {
  51. //Prüft ob ein richtiges erstes args angegeben wurde.
  52. for (idx = 0; idx<8 ; idx++)
  53. {
  54. if (argumens[0].equals(rel_map[idx][0]))
  55. {
  56. parameter1 = true;
  57. break;
  58. }
  59. }
  60. //Prüft ob ein richtiges zweites args angegeben wurde.
  61. for (idx = 0; idx<3 ; idx++)
  62. {
  63. if (argumens[1].equals(action[idx]))
  64. {
  65. parameter2 = true;
  66. break;
  67. }
  68. }
  69. }
  70. // Wenn es nicht zwei Args sind dann wird getestet ob ein h drin ist.
  71. // Wenn ja führt die Funktion show_usage aus.
  72. else if (Arrays.equals (argumens, h) == true)
  73. {
  74. show_usage();
  75. System.exit(0);
  76. }
  77. //Wenn Kein h drin steht und es kein der beiden args enthält kommt eine Fehlermeldung
  78. else
  79. {
  80. System.out.println("Error. If you need help, type the command -h");
  81. System.exit(0);
  82. }
  83. }
  84. /** Die init_gpio-Methode ist eine schleife die alle rel als output definiert.*/
  85. public static void init_gpio()
  86. {
  87. int idx;
  88. String port;
  89. String cmd;
  90. for(idx = 0; idx<8 ; idx++)
  91. {
  92. port = rel_map[idx][1];
  93. cmd = "/usr/bin/gpio -g mode " + port + " out";
  94. launchcmd(cmd);
  95. }
  96. return;
  97. }
  98. /** Die gpio_getport-Methode vergleicht im rel_map welcher port gesucht ist
  99. * @param port - erster eingabe Wert der CMD Zeile
  100. * @return idx - gibt den idx Wert aus rel_map zurück
  101. * @return -1 - Fehler ausgabe
  102. * */
  103. public static int gpio_getport(String port)
  104. {
  105. int idx;
  106. for(idx = 0; idx<8 ; idx++)
  107. {
  108. if(port.equals(rel_map[idx][0]))
  109. {
  110. return idx;
  111. }
  112. }
  113. return -1;
  114. }
  115. /** Die gpio_cmdhandler-Methode schaltet die Relais an oder aus.
  116. * @param port Relais(1-8)
  117. * @param cmd Aktion (on/off/status)
  118. * */
  119. public static void gpio_cmdhandler(String port, String cmd)
  120. {
  121. int idx_port;
  122. idx_port = gpio_getport(port);
  123. if (cmd.equals(action [0]))
  124. {
  125. //Schalte on
  126. cmd = "/usr/bin/gpio -g write " + rel_map[idx_port][1] + " 1";
  127. launchcmd(cmd);
  128. }
  129. else if (cmd.equals(action [1]))
  130. {
  131. //Schalte off
  132. cmd = "/usr/bin/gpio -g write " + rel_map[idx_port][1] + " 0";
  133. launchcmd(cmd);
  134. }
  135. /*if (cmd.equals(action [2]))
  136. {
  137. //Stats geben
  138. cmd = "/usr/bin/gpio -g write " + port + status();
  139. launchcmd(cmd);
  140. }*/
  141. return;
  142. }
  143. /** Die show_usage-Methode gibt eine Hilfestellung bei falscher Eingabe*/
  144. public static void show_usage()
  145. {
  146. System.out.println("You have to enter exactly 2 arguments.");
  147. System.out.println("Example: java gpio_java Argument1 Argument2");
  148. System.out.println("Argument1: rel1, rel2, rel3, ..., rel8");
  149. System.out.println("Argument2: on,off or status");
  150. }
  151. /** Die launchcmd-Methode führt den Prozess aus.
  152. * @param cmd - erster Eingabe Wert der CMD Zeile */
  153. public static void launchcmd(String cmd)
  154. {
  155. // Wenn Simulation True ist kann sie auf dem PC ausfuehren
  156. // wenn die Simulation false is auf dem Raspberry PI
  157. boolean simulation = false;
  158. if(simulation==true){
  159. System.out.println(cmd);
  160. }
  161. else {
  162. try{
  163. Runtime.getRuntime().exec(cmd);
  164. }
  165. catch(IOException e)
  166. {
  167. System.out.println("process error IOException");
  168. }
  169. }
  170. }
  171. }