|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- /**
- * @author Alex Volkmann
- * @date 18.02.2019
- * @function Das programm steuert ein relle an und macht es an oder aus
- */
-
- import java.io.IOException;
- import java.util.Arrays;
- import java.util.concurrent.TimeUnit;
-
- // todo: add Dokumentation
- public class gpio_java
- {
- public static String rel_map [][] = {
- {"rel1","14"},
- {"rel2","15"},
- {"rel3","18"},
- {"rel4","23"},
- {"rel5","24"},
- {"rel6","25"},
- {"rel7","8"},
- {"rel8","7"}
- };
- public static String [] action = {"on", "off", "status"};
-
- /** Die main-Methode ruft die Funktionen in der gegebenen Reihnfolge auf,
- * und gibt die @param args weiter.
- * @param args Commandline argument der main funktion
- */
- public static void main (String [] args)
- {
- // Zum checken der Anzahl der Argumente
- checkargs(args);
-
- // todo: initialisiere alle acht ports (outputs)
- init_gpio();
-
- // setze gpio (gemaes der parameter)
- gpio_getport(args[0]);
-
-
- gpio_cmdhandler(args[0], args[1]);
-
- return;
- }
-
- /** Die checkargs-Methode prüft ob zwei korrekte Argumente eingetragen wurden.
- * @param argumens - Commandline argument
- */
- public static void checkargs(String[] argumens)
- {
- int laenge = argumens.length;
- String [] h = {"-h"};
- int idx;
- boolean parameter1 = false;
- boolean parameter2 = false;
-
- //Prüft ob zwei args angegeben wurden.
- if (laenge == 2)
- {
-
- //Prüft ob ein richtiges erstes args angegeben wurde.
- for (idx = 0; idx<8 ; idx++)
- {
- if (argumens[0].equals(rel_map[idx][0]))
- {
- parameter1 = true;
- break;
- }
- }
-
- //Prüft ob ein richtiges zweites args angegeben wurde.
- for (idx = 0; idx<3 ; idx++)
- {
- if (argumens[1].equals(action[idx]))
- {
- parameter2 = true;
- break;
- }
- }
-
- }
-
- // Wenn es nicht zwei Args sind dann wird getestet ob ein h drin ist.
- // Wenn ja führt die Funktion show_usage aus.
- else if (Arrays.equals (argumens, h) == true)
- {
-
- show_usage();
-
- System.exit(0);
- }
-
- //Wenn Kein h drin steht und es kein der beiden args enthält kommt eine Fehlermeldung
- else
- {
- System.out.println("Error. If you need help, type the command -h");
-
- System.exit(0);
- }
- }
-
- /** Die init_gpio-Methode ist eine schleife die alle rel als output definiert.*/
- public static void init_gpio()
- {
- int idx;
- String port;
- String cmd;
-
- for(idx = 0; idx<8 ; idx++)
- {
- port = rel_map[idx][1];
- cmd = "/usr/bin/gpio -g mode " + port + " out";
- launchcmd(cmd);
-
- }
- return;
- }
-
- /** Die gpio_getport-Methode vergleicht im rel_map welcher port gesucht ist
- * @param port - erster eingabe Wert der CMD Zeile
- * @return idx - gibt den idx Wert aus rel_map zurück
- * @return -1 - Fehler ausgabe
- * */
- public static int gpio_getport(String port)
- {
- int idx;
-
- for(idx = 0; idx<8 ; idx++)
- {
- if(port.equals(rel_map[idx][0]))
- {
- return idx;
- }
- }
-
- return -1;
- }
-
- /** Die gpio_cmdhandler-Methode schaltet die Relais an oder aus.
- * @param port Relais(1-8)
- * @param cmd Aktion (on/off/status)
- * */
- public static void gpio_cmdhandler(String port, String cmd)
- {
- int idx_port;
-
- idx_port = gpio_getport(port);
-
-
- if (cmd.equals(action [0]))
- {
- //Schalte on
- cmd = "/usr/bin/gpio -g write " + rel_map[idx_port][1] + " 1";
- launchcmd(cmd);
-
- }
- else if (cmd.equals(action [1]))
- {
- //Schalte off
- cmd = "/usr/bin/gpio -g write " + rel_map[idx_port][1] + " 0";
- launchcmd(cmd);
- }
- /*if (cmd.equals(action [2]))
- {
- //Stats geben
- cmd = "/usr/bin/gpio -g write " + port + status();
- launchcmd(cmd);
- }*/
- return;
- }
-
- /** Die show_usage-Methode gibt eine Hilfestellung bei falscher Eingabe*/
- public static void show_usage()
- {
- System.out.println("You have to enter exactly 2 arguments.");
- System.out.println("Example: java gpio_java Argument1 Argument2");
- System.out.println("Argument1: rel1, rel2, rel3, ..., rel8");
- System.out.println("Argument2: on,off or status");
- }
-
- /** Die launchcmd-Methode führt den Prozess aus.
- * @param cmd - erster Eingabe Wert der CMD Zeile */
- public static void launchcmd(String cmd)
- {
- // Wenn Simulation True ist kann sie auf dem PC ausfuehren
- // wenn die Simulation false is auf dem Raspberry PI
- boolean simulation = false;
-
- if(simulation==true){
- System.out.println(cmd);
- }
- else {
- try{
- Runtime.getRuntime().exec(cmd);
- }
- catch(IOException e)
- {
- System.out.println("process error IOException");
- }
- }
- }
- }
-
|