Only pass console to command on activate
[kaka/cakelight.git] / src / kaka / cakelight / Console.java
1 package kaka.cakelight;
2
3 import kaka.cakelight.mode.AmbientMode;
4 import kaka.cakelight.mode.SingleColorMode;
5 import kaka.cakelight.mode.TwoColorNoiseMode;
6 import kaka.cakelight.mode.VideoMode;
7
8 import java.io.BufferedReader;
9 import java.io.IOException;
10 import java.io.InputStreamReader;
11
12 public class Console extends Thread {
13     private CakeLight cakelight;
14     private Configuration config;
15     private BufferedReader reader;
16
17     public static void start(CakeLight cakelight, Configuration config) {
18         new Console(cakelight, config).start();
19     }
20
21     private Console(CakeLight cakelight, Configuration config) {
22         this.cakelight = cakelight;
23         this.config = config;
24         reader = new BufferedReader(new InputStreamReader(System.in));
25
26     public CakeLight getCakelight() {
27         return cakelight;
28     }
29
30     public Configuration getConfig() {
31         return config;
32     }
33     }
34
35     @Override
36     public void run() {
37         while (true) {
38             System.out.print("> ");
39             try {
40                 String input = reader.readLine();
41                 if (input.matches("[0-5]")) {
42                     cakelight.setMode(new AmbientMode(new String[] {input}));
43                     System.out.println("setting ambient mode to " + input);
44                 } else if (input.matches("v|video")) {
45                     cakelight.setMode(new VideoMode());
46                 } else if (input.matches("(b|brightness)\\s+[0-9]+")) {
47                     String[] split = input.split("\\s+");
48                     config.leds.brightness = Integer.parseInt(split[1]);
49                     System.out.println("setting brightness to " + config.leds.brightness);
50                 } else if (input.matches("q|quit")) {
51                     cakelight.turnOff();
52                     System.out.println("stopping cakelight");
53                     break;
54                 } else if (input.matches("(c|col|color)(\\s+[0-9]+){3}")) {
55                     String[] split = input.split("\\s+");
56                     Color c = Color.rgb(
57                             Integer.parseInt(split[1]),
58                             Integer.parseInt(split[2]),
59                             Integer.parseInt(split[3])
60                     );
61                     cakelight.setMode(new SingleColorMode(c));
62                     System.out.println("setting color to " + c);
63                 } else if (input.matches("(g|gamma)\\s+[0-9.]+")) {
64                     String[] split = input.split("\\s+");
65                     config.gamma = Double.parseDouble(split[1]);
66                     Color.calculateGammaCorrection(config.gamma);
67                     System.out.println("setting gamma to " + config.gamma);
68                 } else if (input.matches("(s|saturation)\\s+[0-9.]+")) {
69                     String[] split = input.split("\\s+");
70                     config.video.saturation = Double.parseDouble(split[1]);
71                     System.out.println("setting saturation to " + config.video.saturation);
72                 } else if (input.matches("(n|noise)(\\s+[a-z0-9]+){2}")) {
73                     TwoColorNoiseMode.getCommand().activate(this, input.split("\\s+"));
74                     System.out.println("setting two-color noise mode");
75                 }
76             } catch (IOException e) {
77                 System.out.println("Error reading from command line");
78                 break;
79             }
80         }
81     }
82
83     public interface Command {
84         String[] getNames();
85         void activate(Console console, String[] args);
86     }
87 }