1 package com.starphoenixmedia.candle_pos;
2
3 import com.starphoenixmedia.candle_pos.modeforms.BGeneric;
4 import com.starphoenixmedia.candle_pos.modeforms.IModeWindow;
5 import com.starphoenixmedia.candle_pos.modeforms.MConfigure;
6 import com.starphoenixmedia.candle_pos.modeforms.MInventory;
7 import com.starphoenixmedia.candle_pos.modeforms.MSales;
8 import com.starphoenixmedia.candle_pos.modeforms.MTest;
9 import com.starphoenixmedia.candle_pos.scale.ScaleReader;
10 import gnu.io.NRSerialPort;
11 import gnu.io.UnsupportedCommOperationException;
12 import java.util.Iterator;
13 import java.util.Set;
14 import java.util.TooManyListenersException;
15 import java.util.concurrent.ExecutorService;
16 import java.util.concurrent.LinkedBlockingQueue;
17 import java.util.concurrent.ThreadPoolExecutor;
18 import java.util.concurrent.TimeUnit;
19 import java.util.logging.Level;
20 import java.util.logging.Logger;
21 import java.util.regex.Matcher;
22 import java.util.regex.Pattern;
23 import javax.swing.UIManager;
24 import javax.swing.UnsupportedLookAndFeelException;
25
26
27
28
29
30 public class CandleStart
31 {
32 public static ExecutorService es;
33
34 public static void init(String[] args)
35 {
36 String dev;
37 char mode = 's';
38 int parity = 0;
39 int baud = 2400;
40 byte data = 8;
41 int stop = 2;
42
43 if ( args.length == 0 )
44 {
45 StringBuilder sb = new StringBuilder();
46 so(sb, "Usage: dev [mode] [baud] [port]");
47 so(sb, "\tdev\tThe serial port device to open");
48 so(sb, "\tmode\tOperational mode of this program: configure, inventory, sales, test (Default: sales)");
49 so(sb, "\tbaud\tDesired baud rate for scale operations (Default: 2400)");
50 so(sb, "\tport\tPort configuration string for data bits, parity, and stop bits (Default: 8n2)");
51
52 Set<String> ports = NRSerialPort.getAvailableSerialPorts();
53
54 so(sb, "\nAvailable Ports:");
55 Iterator<String> it = ports.iterator();
56 while ( it.hasNext() )
57 {
58 so(sb, it.next(), true);
59 }
60 System.out.println(sb);
61 return;
62 }
63
64 switch ( args.length )
65 {
66 default:
67 case 4:
68 Pattern p = Pattern.compile("([5-8])-?(e|n|o)-?(1|1.5|2)");
69 Matcher m = p.matcher(args[3]);
70
71 data = Byte.parseByte(m.group(1));
72 switch ( m.group(2) )
73 {
74 case "e": parity = 2; break;
75 case "n": parity = 0; break;
76 case "o": parity = 1; break;
77 default:
78 System.out.println("\nERROR\n\tParity must be one of the following: e, n, o");
79 return;
80 }
81 switch ( m.group(3) )
82 {
83 case "1": stop = 1; break;
84 case "1.5": stop = 3; break;
85 case "2": stop = 2; break;
86 default:
87 System.out.println("\nERROR\n\tStop bits must be one of the following: 1, 1.5, 2");
88 return;
89 }
90 case 3:
91 baud = Integer.parseInt(args[2]);
92 case 2:
93 switch ( args[1].toLowerCase().charAt(0) )
94 {
95 case 'c':
96 case 'i':
97 case 's':
98 case 't':
99 mode = args[1].toLowerCase().charAt(0);
100 break;
101 default:
102 mode = 's';
103 }
104 case 1:
105 dev = args[0];
106 }
107
108 es = new ThreadPoolExecutor(5, 20, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(5));
109 try { UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); }
110 catch ( UnsupportedLookAndFeelException | ClassNotFoundException |
111 InstantiationException | IllegalAccessException e)
112 {}
113
114 NRSerialPort sp = new NRSerialPort(dev, baud);
115 sp.connect();
116 try { sp.getSerialPortInstance().setSerialPortParams(baud, data, stop, parity); }
117 catch (UnsupportedCommOperationException ex)
118 { Logger.getLogger(Starter.class.getName()).log(Level.SEVERE, null, ex); }
119
120 try { sp.addEventListener(new BGeneric()); }
121 catch ( TooManyListenersException tml ) { System.out.println("Too Many Listeners!"); }
122
123 ScaleReader sr = new ScaleReader(sp);
124
125 IModeWindow mw = null;
126 switch ( mode )
127 {
128 case 'c': mw = new MConfigure(); break;
129 case 'i': mw = new MInventory(); break;
130 case 's': mw = new MSales(); break;
131 case 't': mw = new MTest(); break;
132 }
133 if ( mw == null ) { System.out.println("\nERROR\n\tCould not determine operational mode."); return; }
134 mw.setup(sr);
135 mw.run();
136 }
137
138 private static void so (StringBuilder sb, String s) { so(sb, s, false); }
139 private static void so (StringBuilder sb, String s, boolean tab)
140 {
141 if ( tab ) { sb.append("\t"); }
142 sb.append(s);
143 sb.append("\n");
144 }
145 }