/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import java.io.IOException;
import javax.microedition.midlet.*;
import com.sun.lwuit.Image;
import com.sun.lwuit.Form;
import com.sun.lwuit.Display;
import com.sun.lwuit.Label;
import com.sun.lwuit.Component;
import com.sun.lwuit.Command;
import com.sun.lwuit.Container;
import com.sun.lwuit.plaf.UIManager;
import com.sun.lwuit.util.Resources;
import com.sun.lwuit.events.*;
import com.sun.lwuit.layouts.*;
import com.sun.lwuit.*;
import javax.microedition.rms.*;
//import java.io.InputStream;
//import java.io.IOException;
import se.krka.kahlua.vm.JavaFunction;
import se.krka.kahlua.vm.LuaCallFrame;
/**
* @author steffen
*/
public class MainMidlet extends MIDlet implements ActionListener, OutputDisplay/*,Runnable*/ {
private Image image;
private Script scriptEngine;
/*
private LuaState state;
*/
private String response;
public BTSerial btComm;
private Form f;
Command startCommand;
Command exitCommand;
Command configCommand;
private String outputArea = "";
private boolean freshDisplayOutput = false;
private boolean blindMode = false;
private Form writeForm = null;
private OutputDisplay myDisplay;
private List cellList = null;
Preferences mPreferences;
private static final String prefsURL = "BTMAC";
private static final String prefsScript = "SCRIPT";
private static final String prefsTheme = "THEME";
private static final String prefsMMS = "MMS";
private static final String scriptDefault = "/OOBD.lbc";
private static final String themeDefault = "/OOBDtheme.res";
private String actTheme = themeDefault;
private String actScript = scriptDefault;
private String actPageName = "?";
public MainMidlet() {
myDisplay = this;
scriptEngine = new LuaScript();
scriptEngine.Script();
scriptEngine.register("openPageCall", new JavaFunction() {
public int call(LuaCallFrame callFrame, int nArguments) {
System.out.println("Lua calls openPage");
//BaseLib.luaAssert(nArguments >0, "not enough args");
scriptEngine.initRPC(callFrame, nArguments);
cellList = new List();
actPageName = scriptEngine.getString(0);
//scriptEngine.finishRPC(callFrame, nArguments);
System.out.println("Lua leaves openPage");
return 1;
}
});
scriptEngine.register("addElementCall", new JavaFunction() {
public int call(LuaCallFrame callFrame, int nArguments) {
//BaseLib.luaAssert(nArguments >0, "not enough args");
System.out.println("Lua calls addElement");
scriptEngine.initRPC(callFrame, nArguments);
cellList.addItem(new ScriptCell(
scriptEngine.getString(0), //String title
scriptEngine.getString(1), //String function
scriptEngine.getString(2), //String initalValue
scriptEngine.getInt(3), //int OOBDElementFlags
scriptEngine.getString(4) //String id
));
scriptEngine.finishRPC(callFrame, nArguments);
return 1;
}
});
scriptEngine.register("pageDoneCall", new JavaFunction() {
public int call(LuaCallFrame callFrame, int nArguments) {
System.out.println("Lua calls pageDone");
//BaseLib.luaAssert(nArguments >0, "not enough args");
scriptEngine.initRPC(callFrame, nArguments);
writeForm = new ScriptForm(f, cellList, actPageName, scriptEngine, myDisplay);
scriptEngine.finishRPC(callFrame, nArguments);
return 1;
}
});
scriptEngine.register("serReadLnCall", new JavaFunction() {
public int call(LuaCallFrame callFrame, int nArguments) {
System.out.println("Lua calls serReadLn");
//BaseLib.luaAssert(nArguments >0, "not enough args");
scriptEngine.initRPC(callFrame, nArguments);
System.out.println("timeout value:" + Integer.toString(scriptEngine.getInt(0)));
if (scriptEngine.getBoolean(1) == true) {
System.out.println("ignore value: true");
} else {
if (scriptEngine.getBoolean(1) == false) {
System.out.println("ignore value: false");
} else {
System.out.println("ignore value: undefined");
}
}
String result = "";
if (btComm != null) {
result = btComm.readln(scriptEngine.getInt(0), scriptEngine.getBoolean(1));
//result = btComm.readln(2000, true);
}
callFrame.push(result.intern());
scriptEngine.finishRPC(callFrame, nArguments);
return 1;
}
});
scriptEngine.register("serWaitCall", new JavaFunction() {
public int call(LuaCallFrame callFrame, int nArguments) {
System.out.println("Lua calls serWait");
//BaseLib.luaAssert(nArguments >0, "not enough args");
scriptEngine.initRPC(callFrame, nArguments);
int result = 0;
if (btComm != null) {
result = btComm.wait(scriptEngine.getString(0), scriptEngine.getInt(1));
}
callFrame.push(new Integer(result));
scriptEngine.finishRPC(callFrame, nArguments);
return 1;
}
});
scriptEngine.register("serSleepCall", new JavaFunction() {
public int call(LuaCallFrame callFrame, int nArguments) {
System.out.println("Lua calls serSleep");
//BaseLib.luaAssert(nArguments >0, "not enough args");
scriptEngine.initRPC(callFrame, nArguments);
try {
Thread.sleep(scriptEngine.getInt(0));
} catch (InterruptedException e) {
// the VM doesn't want us to sleep anymore,
// so get back to work
}
scriptEngine.finishRPC(callFrame, nArguments);
return 1;
}
});
scriptEngine.register("serWriteCall", new JavaFunction() {
public int call(LuaCallFrame callFrame, int nArguments) {
System.out.println("Lua calls serWrite");
//BaseLib.luaAssert(nArguments >0, "not enough args");
scriptEngine.initRPC(callFrame, nArguments);
if (btComm != null) {
btComm.write(scriptEngine.getString(0));
}
scriptEngine.finishRPC(callFrame, nArguments);
return 1;
}
});
scriptEngine.register("serFlushCall", new JavaFunction() {
public int call(LuaCallFrame callFrame, int nArguments) {
System.out.println("Lua calls serFlush");
//BaseLib.luaAssert(nArguments >0, "not enough args");
scriptEngine.initRPC(callFrame, nArguments);
if (btComm != null) {
btComm.flush();
}
scriptEngine.finishRPC(callFrame, nArguments);
return 1;
}
});
scriptEngine.register("serDisplayWriteCall", new JavaFunction() {
public int call(LuaCallFrame callFrame, int nArguments) {
System.out.println("Lua calls serDisplayWrite");
//BaseLib.luaAssert(nArguments >0, "not enough args");
scriptEngine.initRPC(callFrame, nArguments);
prepareDisplayWrite(scriptEngine.getString(0));
scriptEngine.finishRPC(callFrame, nArguments);
return 1;
}
});
}
public void run() {
try {
scriptEngine.doRun();
} catch (Exception e) {
e.printStackTrace();
} finally {
notifyDestroyed();
}
}
public void startApp() {
Display.init(this);
if (f == null) {
btComm = new BTSerial();
// try to load Prefs
try {
mPreferences = new Preferences("preferences");
actTheme = mPreferences.get(prefsTheme);
if (actTheme == null) {
actTheme = themeDefault;
}
actScript = mPreferences.get(prefsScript);
btComm.URL = mPreferences.get(prefsURL);
if (actScript == null) {
actScript = scriptDefault;
}
} catch (RecordStoreException rse) {
}
setTheme(actTheme);
f = new Form("OOBD ME");
f.setLayout(new BorderLayout());
try {
image = Image.createImage("/oobd.PNG");
} catch (java.io.IOException ioe) {
ioe.printStackTrace();
}
Label logo = new Label(image);
logo.setAlignment(Component.CENTER);
logo.setText("www.oobd.org");
logo.setTextPosition(Component.BOTTOM);
f.addComponent(BorderLayout.CENTER, logo);
startCommand = new Command("Start");
configCommand = new Command("Config");
exitCommand = new Command("Exit");
f.addCommand(startCommand);
f.addCommand(exitCommand);
f.addCommand(configCommand);
f.show();
f.addCommandListener(this);
}
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
public void shutdownApp() {
try {
mPreferences.save();
} catch (RecordStoreException rse) {
}
if (btComm != null) {
btComm.Closeconnection();
}
destroyApp(true);
notifyDestroyed();
}
public void actionPerformed(ActionEvent ae) {
Command command = ae.getCommand();
if (command == exitCommand) {
shutdownApp();
}
if (command == configCommand) {
//btComm.getDeviceURL();
ConfigForm myConfig = new ConfigForm(f, btComm, this);
}
if (command == startCommand) {
if (blindMode || tryToConnect()) {
try {
System.out.println("Try to load script " + actScript);
scriptEngine.doScript(actScript);
if (!actScript.equals(scriptDefault)) {
mPreferences.put(prefsScript, actScript);
}
} catch (java.io.IOException ioe) {
ioe.printStackTrace();
}
}
// Form displayForm = new ScriptForm(f,cellList);
}
}
public void setTheme(String themeFile) {
if (themeFile != null) {
try {
Resources r = Resources.open(themeFile);
UIManager.getInstance().setThemeProps(r.getTheme("LWUITDefault"));
actTheme = themeFile;
if (!actTheme.equals(themeDefault)) {
mPreferences.put(prefsTheme, actTheme);
}
} catch (java.io.IOException ioe) {
System.out.println("Couldn't load theme.");
try {
Resources r = Resources.open(actTheme);
UIManager.getInstance().setThemeProps(r.getTheme("LWUITDefault"));
} catch (java.io.IOException ioe2) {
System.out.println("Couldn't load theme.");
}
}
}
}
public void setScript(String scriptFile) {
if (scriptFile != null) {
actScript = scriptFile;
} else {
actScript = scriptDefault;
}
}
public void setBlindMode(boolean active) {
blindMode = active;
}
public boolean getBlindMode() {
return blindMode;
}
public String getScript() {
return actScript;
}
public String getMmsAddress() {
if (mPreferences.get(prefsMMS)!=null){
return mPreferences.get(prefsMMS);
}else{
return "";
}
}
public void setMmsAddress(String MmsAddress) {
mPreferences.put(prefsMMS, MmsAddress);
}
boolean tryToConnect() {
if (!btComm.isConnected()) {
if (btComm.URL != null) {
btComm.Connect(btComm.URL);
if (btComm.isConnected()) {
mPreferences.put(prefsURL, btComm.URL);
return true;
} else {
Dialog.show("Error", "Not connected !", "ok", "ok");
return false;
}
} else {
Dialog.show("Not BT configured", "Please configure your Bluetooth device first", "ok", "ok");
return false;
}
} else {
return true;
}
}
public void prepareDisplayWrite(String outputLine) {
outputArea += outputLine + "\n";
freshDisplayOutput = true;
}
public void outputDisplayIfAny() {
if (freshDisplayOutput) {
ShowWrite("", writeForm,this);
}
}
void ShowWrite(String content, final Form parent, final MainMidlet mainMidlet) {
final Form displayForm = new Form("Output");
freshDisplayOutput = false;
outputArea += content;
final TextArea big = new TextArea(outputArea);
displayForm.addComponent(big);
displayForm.addCommand(new Command("Exit") {
public void actionPerformed(ActionEvent evt) {
parent.showBack();
}
});
try { // does the device support MMS???
Class.forName("javax.wireless.messaging.MessageConnection");
displayForm.addCommand(new Command("Send") {
public void actionPerformed(ActionEvent evt) {
SendMMS sendMMS= new SendMMS(outputArea,displayForm, mainMidlet);
}
});
} catch (Exception e) {
}
displayForm.addCommand(new Command("Clear") {
public void actionPerformed(ActionEvent evt) {
outputArea = "";
big.setText("");
}
});
//addCommandListener(this);
displayForm.show();
}
}