package arduino;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Set;
import device.DeviceList;
import device.SensorNode;
import project.Project;
import senscript.Command;
public class Arduino {
public static String r = "" ;
//"1:VERT:A:0X13A200:0X40B5EF9E"
//"2:JAUNE:B:0X13A200:0X40B58284"
//"3:ROUGE:C:0X13A200:0X40B5EFA6"
//"4:BLEU:D:0X13A200:0X40BEBA04"
//"5:NEUTRE:FFFF:0X13A200:406E5E6F"
public static ArrayList<String []> xbeeList ;
public static Set<String> variables ;
public static void generateCode() {
try {
System.out.println("XBEE File OK");
System.out.println(Project.projectPath + File.separator + "xbee" + File.separator + "xbee.txt");
FileReader xbeeFile = new FileReader(Project.projectPath + File.separator + "xbee" + File.separator + "xbee.txt");
BufferedReader br = new BufferedReader(xbeeFile);
xbeeList = new ArrayList<String []>();
String [] row = new String [5];
String s ;
try {
while((s=br.readLine()) != null) {
row = s.split(":");
xbeeList.add(row);
}
br.close();
xbeeFile.close();
for(String [] st : xbeeList) {
System.out.println(Arrays.toString(st));
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e1) {
System.out.println("No XBEE File");
xbeeList = new ArrayList<String []>();
String [] row = new String [5];
row[0] = "1"; row[1] = "GREEN"; row[2] = "A"; row[3] = "0X13A200"; row[4] = "0X40B5EF9E";
xbeeList.add(row);
row = new String [5];
row[0] = "2"; row[1] = "YELLOW"; row[2] = "B"; row[3] = "0X13A200"; row[4] = "0X40B58284";
xbeeList.add(row);
row = new String [5];
row[0] = "3"; row[1] = "RED"; row[2] = "C"; row[3] = "0X13A200"; row[4] = "0X40B5EFA6";
xbeeList.add(row);
row = new String [5];
row[0] = "4"; row[1] = "BLUE"; row[2] = "D"; row[3] = "0X13A200"; row[4] = "0X40BEBA04";
xbeeList.add(row);
row = new String [5];
row[0] = "5"; row[1] = "WHITE"; row[2] = "E"; row[3] = "0X13A200"; row[4] = "0x406E5E6F";
xbeeList.add(row);
for(String [] st : xbeeList) {
System.out.println(Arrays.toString(st));
}
}
variables = new HashSet<String>();
File arduinoDir = new File(Project.projectPath + File.separator + "arduino" + File.separator);
for(SensorNode sensor : DeviceList.sensors) {
System.out.println("---------------------------------");
System.out.println("Sensor: S"+sensor.getId());
System.out.println("---------------------------------");
sensor.loadScript();
LinkedList<Command> cList = sensor.getScript().getCommands();
Bracket.n = 0;
r = "" ;
r += "\n";
r += "\tdelay(100);" + "\n";
r += "\tSerial.begin(38400);" + "\n";
r += "\txbee.setSerial(Serial);\n";
r += "\tdelay(100);" + "\n";
r += "\tlcd.begin(16, 2);\n";
r += "\tlcd.setCursor(0,0);\n";
r += "\n";
for(Command command : cList) {
r += command.getArduinoForm() + "\n";
}
r = "void setup() {" + "\n" + BeginInstructions.get() + r ;
r = "\nLiquidCrystal lcd(8, 9, 4, 5, 6, 7);\n\n" + r;
r = "uint8_t* rdata;\n" + r ;
r = "uint8_t sdata[30] ;\n" + r ;
r = "XBeeAddress64 addr;\n" + r ;
r = "Tx64Request tx;\n" + r ;
r = "Rx64Response rx = Rx64Response() ;\n" + r ;
r = "XBee xbee = XBee();\n" + r ;
r = "#include <LiquidCrystal.h>\n\n" + r ;
r = "#include <XBee.h>\n" + r ;
r += "\n";
for(int i=0; i<Bracket.n; i++) {
r += "}\n";
}
r += "}" + "\n";
try {
String fname = "arduino_"+sensor.getId();
arduinoDir = new File(Project.projectPath+"/arduino/"+fname);
arduinoDir.mkdirs();
FileOutputStream f = new FileOutputStream(Project.projectPath + File.separator + "arduino" + File.separator + fname + File.separator + fname + ".ino");
PrintStream p = new PrintStream(f);
p.print(r);
p.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
System.out.println("Code Generation : Finish!");
//System.out.println(r);
}
}
}