tux-droid-svn Mailing List for Tux Droid CE (Page 53)
Status: Beta
Brought to you by:
ks156
You can subscribe to this list here.
| 2007 |
Jan
|
Feb
(32) |
Mar
(108) |
Apr
(71) |
May
(38) |
Jun
(128) |
Jul
(1) |
Aug
(14) |
Sep
(77) |
Oct
(104) |
Nov
(90) |
Dec
(71) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2008 |
Jan
(81) |
Feb
(18) |
Mar
(40) |
Apr
(102) |
May
(151) |
Jun
(74) |
Jul
(151) |
Aug
(257) |
Sep
(447) |
Oct
(379) |
Nov
(404) |
Dec
(430) |
| 2009 |
Jan
(173) |
Feb
(236) |
Mar
(519) |
Apr
(300) |
May
(112) |
Jun
(232) |
Jul
(314) |
Aug
(58) |
Sep
(203) |
Oct
(293) |
Nov
(26) |
Dec
(109) |
| 2010 |
Jan
(19) |
Feb
(25) |
Mar
(33) |
Apr
(1) |
May
|
Jun
(3) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: remi <c2m...@c2...> - 2009-06-03 09:34:07
|
Author: remi
Date: 2009-06-03 11:34:02 +0200 (Wed, 03 Jun 2009)
New Revision: 4730
Modified:
software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePlugin.java
software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePluginConfiguration.java
Log:
* code style
* methods order
Modified: software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePlugin.java
===================================================================
--- software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePlugin.java 2009-06-03 08:58:15 UTC (rev 4729)
+++ software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePlugin.java 2009-06-03 09:34:02 UTC (rev 4730)
@@ -40,9 +40,10 @@
* email)
* @since 3 juin 08
*/
-public abstract class SimplePlugin<CONFIGURATION extends SimplePluginConfiguration> {
+public abstract class SimplePlugin<CONFIGURATION extends SimplePluginConfiguration>
+{
public static final String ENVIRONEMENT_PREFIX = "tgp_";
- /** configuration. */
+ private String command = null;
private CONFIGURATION configuration;
private StdInCom stdInCom = null;
@@ -59,7 +60,8 @@
try
{
SimplePlugin.this.onPluginStop();
- } catch (Throwable e)
+ }
+ catch (Throwable e)
{
SimplePlugin.this.throwError(e);
}
@@ -73,112 +75,160 @@
try
{
SimplePlugin.this.onPluginEvent(eventName, eventValues);
- } catch (Throwable e)
+ }
+ catch (Throwable e)
{
SimplePlugin.this.throwError(e);
}
}
}
+
+ /**
+ * On plugin stop event.
+ * this method should be defined in your plugin class.
+ * @throws Throwable
+ * when something go wrong...
+ */
+ protected abstract void onPluginStop() throws Throwable;
+
+ /**
+ * On plugin event.
+ * this method should be defined in your plugin class.
+ * @throws Throwable
+ * when something go wrong...
+ */
+ protected abstract void onPluginEvent(String eventName, String[] eventValues) throws Throwable;
/**
+ * Stop the plugin.
+ */
+ public void stop()
+ {
+ if (this.stdInCom != null)
+ {
+ this.stdInCom.stopPipe();
+ }
+ try
+ {
+ this.onPluginStop();
+ }
+ catch (Throwable e)
+ {
+ this.throwError(e);
+ }
+ this.throwNotification("plugin", "exit");
+ }
+
+ /**
* @return the configuration
*/
- protected CONFIGURATION configuration() {
+ protected CONFIGURATION configuration()
+ {
return configuration;
}
/**
- * This is the generic method for throwing notifications to the server.
- *
- * @param notificationId
- * ID of the notification (this should match with declared
- * notifications in plugins.xml)
- * @param arguments
- * Notification arguments
+ * @return the command
*/
- protected void throwNotification(String notificationId, String... arguments) {
- StringBuffer buffer = new StringBuffer();
- buffer.append(notificationId);
- for (String argument : arguments) {
- buffer.append(" '");
- buffer.append(argument.replace("'", "\\'"));
- buffer.append("'");
- }
- System.out.println(buffer.toString());
- System.out.flush();
+ protected String getCommand()
+ {
+ return command;
}
- protected boolean isWindows() {
+ /**
+ * @param command
+ * the command to set
+ */
+ protected void setCommand(String command)
+ {
+ this.command = command;
+ }
+
+ /**
+ * Get if the platform is Windows or not.
+ * @return A boolean.
+ */
+ protected boolean isWindows()
+ {
String osName = System.getProperty("os.name").toLowerCase();
return osName.startsWith("windows");
}
-
- private void loadEnvironementData() throws SimplePluginException {
- if (configuration == null) {
+
+ /**
+ * Load the environement data to the plugin parameters.
+ * @throws SimplePluginException
+ */
+ private void loadEnvironementData() throws SimplePluginException
+ {
+ if (configuration == null)
+ {
return;
}
Map<String, String> environement = System.getenv();
throwTrace("Loading environement");
- for (String key : environement.keySet()) {
- if (key.startsWith(ENVIRONEMENT_PREFIX)) {
+ for (String key : environement.keySet())
+ {
+ if (key.startsWith(ENVIRONEMENT_PREFIX))
+ {
String stringValue = environement.get(key);
key = key.substring(ENVIRONEMENT_PREFIX.length());
throwTrace(" " + key + ":" + stringValue);
Field field = null;
Class<?> class1 = configuration.getClass();
- while (class1 != null) {
- try {
+ while (class1 != null)
+ {
+ try
+ {
field = class1.getDeclaredField(key);
- } catch (Exception e) {
}
+ catch (Exception e) {}
class1 = class1.getSuperclass();
}
- if (field == null) {
+ if (field == null)
+ {
continue;
}
field.setAccessible(true);
- try {
- if (field.getType() == String.class) {
+ try
+ {
+ if (field.getType() == String.class)
+ {
field.set(configuration, stringValue);
- } else if (field.getType() == int.class || field.getType() == Integer.class) {
+ }
+ else if (field.getType() == int.class || field.getType() == Integer.class)
+ {
field.set(configuration, Integer.parseInt(stringValue));
- } else if (field.getType() == double.class || field.getType() == Double.class) {
+ }
+ else if (field.getType() == double.class || field.getType() == Double.class)
+ {
field.set(configuration, Double.parseDouble(stringValue));
- } else if (field.getType() == boolean.class || field.getType() == Boolean.class) {
+ }
+ else if (field.getType() == boolean.class || field.getType() == Boolean.class)
+ {
field.set(configuration, Boolean.parseBoolean(stringValue));
- } else if (field.getType().getSuperclass() == Enum.class) {
+ }
+ else if (field.getType().getSuperclass() == Enum.class)
+ {
Enum newValue = Enum.valueOf((Class<Enum>) field.getType(), stringValue);
field.set(configuration, newValue);
- } else {
+ }
+ else
+ {
this.throwError(new SimplePluginException("Unable to find conversion for : " + field.getType()));
continue;
}
- } catch (Exception e) {
+ }
+ catch (Exception e)
+ {
this.throwError(e);
continue;
}
}
}
}
-
+
/**
- * This is a special notification used to send "speakable" messages to the
- * server.
- *
- * @param content
- * message content
- */
- public void throwMessage(String content, Object... arguments) {
- String[] tmp = new String[arguments.length + 1];
- tmp[0] = content;
- for (int i = 0; i < arguments.length; i++) {
- tmp[i + 1] = String.valueOf(arguments[i]);
- }
- throwNotification("message", tmp);
- }
-
- /**
* This method is used a starting point for the plugin. The standard way to
* use this adding in your inherited plugin class something like this :
*
@@ -193,9 +243,12 @@
* @param configuration
* a new configuration object
*/
- protected void boot(String[] arguments, CONFIGURATION configuration) {
- try {
- if (arguments.length > 0) {
+ protected void boot(String[] arguments, CONFIGURATION configuration)
+ {
+ try
+ {
+ if (arguments.length > 0)
+ {
command = arguments[0];
}
this.configuration = configuration;
@@ -212,29 +265,14 @@
{
onPluginStop();
}
- } catch (Throwable e) {
+ }
+ catch (Throwable e)
+ {
throwError(e);
}
}
-
- private String command = null;
-
+
/**
- * @return the command
- */
- protected String getCommand() {
- return command;
- }
-
- /**
- * @param command
- * the command to set
- */
- protected void setCommand(String command) {
- this.command = command;
- }
-
- /**
* this method should be defined in your plugin class. This handle the main
* function of it. Be careful, if your make a plugin in "command mode" you
* should leave this as soon as possible. If your are making a "service"
@@ -246,47 +284,117 @@
protected abstract void start() throws Throwable;
/**
- * On plugin stop event.
- * this method should be defined in your plugin class.
- * @throws Throwable
- * when something go wrong...
+ * Get the full path of a file located in the "state" directory of a deployed
+ * plugin.
*/
- protected abstract void onPluginStop() throws Throwable;
-
+ protected File getStateFile(String name)
+ {
+ // State files should stay in the working folder of plugins in order
+ // to be deleted when the plugin is updated (re-deployed)
+ File sessionId = new File("states");
+ sessionId.mkdirs();
+ sessionId = new File(sessionId, name);
+ return sessionId;
+ }
+
/**
- * On plugin event.
- * this method should be defined in your plugin class.
- * @throws Throwable
- * when something go wrong...
+ * Get the full path of a file located in the "state" directory of a deployed
+ * plugin.
*/
- protected abstract void onPluginEvent(String eventName, String[] eventValues) throws Throwable;
-
+ protected <E> E readState(Class<E> objectClass, String sessionId)
+ {
+ try
+ {
+ File file = getStateFile(sessionId);
+ E result;
+ if (file.exists())
+ {
+ ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(file));
+ result = (E) inputStream.readObject();
+ }
+ else
+ {
+ result = objectClass.newInstance();
+ }
+ return result;
+ }
+ catch (Exception e)
+ {
+ throwError(e);
+ return null;
+ }
+ }
+
/**
- * Stop the plugin.
+ * Read a serialized object from a file.
*/
- public void stop()
+ protected void writeState(Object object, String sessionId)
{
- if (this.stdInCom != null)
+ File file = getStateFile(sessionId);
+ try
{
- this.stdInCom.stopPipe();
+ ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file));
+ outputStream.writeObject(object);
+ outputStream.close();
}
- try {
- this.onPluginStop();
- } catch (Throwable e) {
- this.throwError(e);
+ catch (Exception e)
+ {
+ throwError(e);
}
- this.throwNotification("plugin", "exit");
}
/**
+ * This is the generic method for throwing notifications to the server.
+ *
+ * @param notificationId
+ * ID of the notification (this should match with declared
+ * notifications in plugins.xml)
+ * @param arguments
+ * Notification arguments
+ */
+ protected void throwNotification(String notificationId, String... arguments)
+ {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append(notificationId);
+ for (String argument : arguments)
+ {
+ buffer.append(" '");
+ buffer.append(argument.replace("'", "\\'"));
+ buffer.append("'");
+ }
+ System.out.println(buffer.toString());
+ System.out.flush();
+ }
+
+ /**
+ * This is a special notification used to send "speakable" messages to the
+ * server.
+ *
+ * @param content
+ * message content
+ */
+ public void throwMessage(String content, Object... arguments)
+ {
+ String[] tmp = new String[arguments.length + 1];
+ tmp[0] = content;
+ for (int i = 0; i < arguments.length; i++)
+ {
+ tmp[i + 1] = String.valueOf(arguments[i]);
+ }
+ throwNotification("message", tmp);
+ }
+
+ /**
* This function throw a debug trace to the server. The server should have
* activate traces for this plugin in order to display them.
*
* @param message
* trace message
*/
- protected void throwTrace(String message) {
- if (!configuration.isTraces()) {
+ protected void throwTrace(String message)
+ {
+ if (!configuration.isTraces())
+ {
return;
}
throwNotification("trace", message);
@@ -298,7 +406,8 @@
* @param result
* Check command result
*/
- protected void throwResult(boolean result) {
+ protected void throwResult(boolean result)
+ {
String resultValue;
if (result) resultValue = "true";
else resultValue = "false";
@@ -309,10 +418,12 @@
* This is a special notification used to send "actuation" to the
* server.
*/
- public void throwActuation(String actuationName, Object... arguments) {
+ public void throwActuation(String actuationName, Object... arguments)
+ {
String[] tmp = new String[arguments.length + 1];
tmp[0] = actuationName;
- for (int i = 0; i < arguments.length; i++) {
+ for (int i = 0; i < arguments.length; i++)
+ {
tmp[i + 1] = String.valueOf(arguments[i]);
}
throwNotification("actuation", tmp);
@@ -325,54 +436,18 @@
* @param throwable
* Exception to throw.
*/
- protected void throwError(Throwable throwable) {
- if (configuration.isTraces()) {
+ protected void throwError(Throwable throwable)
+ {
+ if (configuration.isTraces())
+ {
final Writer result = new StringWriter();
final PrintWriter printWriter = new PrintWriter(result);
throwable.printStackTrace(printWriter);
throwNotification("error", result.toString());
- } else {
+ }
+ else
+ {
throwNotification("error", throwable.getMessage());
}
-
}
-
- protected File getStateFile(String name) {
- // State files should stay in the working folder of plugins in order
- // to be deleted when the plugin is updated (re-deployed)
- File sessionId = new File("states");
- sessionId.mkdirs();
- sessionId = new File(sessionId, name);
- return sessionId;
- }
-
- protected <E> E readState(Class<E> objectClass, String sessionId) {
- try {
- File file = getStateFile(sessionId);
- E result;
- if (file.exists()) {
- ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(file));
- result = (E) inputStream.readObject();
- } else {
-
- result = objectClass.newInstance();
- }
- return result;
- } catch (Exception e) {
- throwError(e);
- return null;
- }
- }
-
- protected void writeState(Object object, String sessionId) {
- File file = getStateFile(sessionId);
- try {
- ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file));
- outputStream.writeObject(object);
- outputStream.close();
- } catch (Exception e) {
- throwError(e);
- }
- }
-
}
Modified: software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePluginConfiguration.java
===================================================================
--- software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePluginConfiguration.java 2009-06-03 08:58:15 UTC (rev 4729)
+++ software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePluginConfiguration.java 2009-06-03 09:34:02 UTC (rev 4730)
@@ -22,7 +22,8 @@
package com.kysoh.tuxdroid.plugin.framework.plugin;
-public class SimplePluginConfiguration {
+public class SimplePluginConfiguration
+{
private boolean traces = false;
private int pitch = 100;
private String language = "en";
@@ -34,7 +35,8 @@
/**
* @return the pitch
*/
- public int getPitch() {
+ public int getPitch()
+ {
return pitch;
}
@@ -42,14 +44,16 @@
* @param pitch
* the pitch to set
*/
- public void setPitch(int pitch) {
+ public void setPitch(int pitch)
+ {
this.pitch = pitch;
}
/**
* @return the language
*/
- public String getLanguage() {
+ public String getLanguage()
+ {
return language;
}
@@ -57,14 +61,16 @@
* @param language
* the language to set
*/
- public void setLanguage(String language) {
+ public void setLanguage(String language)
+ {
this.language = language;
}
/**
* @return the country
*/
- public String getCountry() {
+ public String getCountry()
+ {
return country;
}
@@ -72,14 +78,16 @@
* @param country
* the country to set
*/
- public void setCountry(String country) {
+ public void setCountry(String country)
+ {
this.country = country;
}
/**
* @return the locutor
*/
- public String getLocutor() {
+ public String getLocutor()
+ {
return locutor;
}
@@ -87,14 +95,16 @@
* @param locutor
* the locutor to set
*/
- public void setLocutor(String locutor) {
+ public void setLocutor(String locutor)
+ {
this.locutor = locutor;
}
/**
* @return the traces
*/
- public boolean isTraces() {
+ public boolean isTraces()
+ {
return traces;
}
@@ -102,7 +112,8 @@
* @param traces
* the traces to set
*/
- public void setTraces(boolean traces) {
+ public void setTraces(boolean traces)
+ {
this.traces = traces;
}
|
|
From: remi <c2m...@c2...> - 2009-06-03 08:58:32
|
Author: remi
Date: 2009-06-03 10:58:15 +0200 (Wed, 03 Jun 2009)
New Revision: 4729
Modified:
software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePlugin.java
software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/StdInCom.java
software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/StdInComListener.java
Log:
* added throwActuation method to the SimplePlugin class
* added handling of the events from the server
Modified: software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePlugin.java
===================================================================
--- software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePlugin.java 2009-06-03 08:32:45 UTC (rev 4728)
+++ software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePlugin.java 2009-06-03 08:58:15 UTC (rev 4729)
@@ -64,6 +64,20 @@
SimplePlugin.this.throwError(e);
}
}
+
+ /**
+ * Event on stdin received event from server.
+ */
+ public void serverEvent(String eventName, String[] eventValues)
+ {
+ try
+ {
+ SimplePlugin.this.onPluginEvent(eventName, eventValues);
+ } catch (Throwable e)
+ {
+ SimplePlugin.this.throwError(e);
+ }
+ }
}
/**
@@ -240,6 +254,14 @@
protected abstract void onPluginStop() throws Throwable;
/**
+ * On plugin event.
+ * this method should be defined in your plugin class.
+ * @throws Throwable
+ * when something go wrong...
+ */
+ protected abstract void onPluginEvent(String eventName, String[] eventValues) throws Throwable;
+
+ /**
* Stop the plugin.
*/
public void stop()
@@ -282,6 +304,19 @@
else resultValue = "false";
throwNotification("check_result", resultValue);
}
+
+ /**
+ * This is a special notification used to send "actuation" to the
+ * server.
+ */
+ public void throwActuation(String actuationName, Object... arguments) {
+ String[] tmp = new String[arguments.length + 1];
+ tmp[0] = actuationName;
+ for (int i = 0; i < arguments.length; i++) {
+ tmp[i + 1] = String.valueOf(arguments[i]);
+ }
+ throwNotification("actuation", tmp);
+ }
/**
* When something go wrong, you can use this function to throw an exception
Modified: software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/StdInCom.java
===================================================================
--- software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/StdInCom.java 2009-06-03 08:32:45 UTC (rev 4728)
+++ software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/StdInCom.java 2009-06-03 08:58:15 UTC (rev 4729)
@@ -125,6 +125,25 @@
}
this.setRun(false);
}
+ else if (rcvLine.toLowerCase().startsWith("event"))
+ {
+ String[] sltLine = rcvLine.split(":");
+ // Get event name
+ if (sltLine.length > 1)
+ {
+ String eventName = sltLine[1];
+ // Get event values
+ String[] eventValues = new String[sltLine.length - 2];
+ for (int i = 0; i < sltLine.length - 2; i++)
+ {
+ eventValues[i] = sltLine[i + 2];
+ }
+ if (stdInComListener != null)
+ {
+ stdInComListener.serverEvent(eventName, eventValues);
+ }
+ }
+ }
try {
this.sleep(100);
} catch (InterruptedException e) {}
Modified: software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/StdInComListener.java
===================================================================
--- software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/StdInComListener.java 2009-06-03 08:32:45 UTC (rev 4728)
+++ software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/StdInComListener.java 2009-06-03 08:58:15 UTC (rev 4729)
@@ -25,4 +25,6 @@
public interface StdInComListener
{
void stopped();
+
+ void serverEvent(String eventName, String[] eventValues);
}
|
|
From: remi <c2m...@c2...> - 2009-06-03 08:32:51
|
Author: remi
Date: 2009-06-03 10:32:45 +0200 (Wed, 03 Jun 2009)
New Revision: 4728
Added:
software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/
software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/
software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/
software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePlugin.java
software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePluginConfiguration.java
software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePluginException.java
software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/StdInCom.java
software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/StdInComListener.java
Removed:
software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/gadget/
Modified:
software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/pom.xml
Log:
* refactored project with "plugin" nomenclature instead of "gadget"
* bumped to 0.0.3
Modified: software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/pom.xml
===================================================================
--- software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/pom.xml 2009-06-03 08:10:12 UTC (rev 4727)
+++ software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/pom.xml 2009-06-03 08:32:45 UTC (rev 4728)
@@ -1,10 +1,10 @@
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.kysoh</groupId>
- <artifactId>tuxdroid-gadget-java-kit</artifactId>
+ <artifactId>tuxdroid-plugin-java-kit</artifactId>
<packaging>jar</packaging>
- <version>0.0.2</version>
- <name>Tuxdroid Gadget Java Kit</name>
+ <version>0.0.3</version>
+ <name>Smart-Core Plugin Java Kit</name>
<url>http://www.tuxisalive.com</url>
<dependencies>
<dependency>
Added: software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePlugin.java
===================================================================
--- software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePlugin.java (rev 0)
+++ software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePlugin.java 2009-06-03 08:32:45 UTC (rev 4728)
@@ -0,0 +1,343 @@
+/* This file is part of "Smart-Core Plugin Java Kit".
+ * Copyright 2008, kysoh
+ * Author : Yoran Brault
+ * eMail : software@_bad_karma-lab.net (remove _bad_ before sending an email)
+ * Site : http://www.kysoh.com/
+ *
+ * "Smart-Core Plugin Java Kit" is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * "Smart-Core Plugin Java Kit" is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with "Smart-Core Plugin Java Kit"; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package com.kysoh.tuxdroid.plugin.framework.plugin;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.lang.reflect.Field;
+import java.util.Map;
+
+/**
+ * This class is the base class helper for builder java plugins.
+ *
+ * @author yoran.brault@_bad_karma-lab.net (remove _bad_ before sending an
+ * email)
+ * @since 3 juin 08
+ */
+public abstract class SimplePlugin<CONFIGURATION extends SimplePluginConfiguration> {
+ public static final String ENVIRONEMENT_PREFIX = "tgp_";
+ /** configuration. */
+ private CONFIGURATION configuration;
+ private StdInCom stdInCom = null;
+
+ /**
+ * Class which implements the Stdin pipe listener.
+ */
+ class StdInComObserver implements StdInComListener
+ {
+ /**
+ * Event on stdin stopped event.
+ */
+ public void stopped()
+ {
+ try
+ {
+ SimplePlugin.this.onPluginStop();
+ } catch (Throwable e)
+ {
+ SimplePlugin.this.throwError(e);
+ }
+ }
+ }
+
+ /**
+ * @return the configuration
+ */
+ protected CONFIGURATION configuration() {
+ return configuration;
+ }
+
+ /**
+ * This is the generic method for throwing notifications to the server.
+ *
+ * @param notificationId
+ * ID of the notification (this should match with declared
+ * notifications in plugins.xml)
+ * @param arguments
+ * Notification arguments
+ */
+ protected void throwNotification(String notificationId, String... arguments) {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append(notificationId);
+ for (String argument : arguments) {
+ buffer.append(" '");
+ buffer.append(argument.replace("'", "\\'"));
+ buffer.append("'");
+ }
+ System.out.println(buffer.toString());
+ System.out.flush();
+ }
+
+ protected boolean isWindows() {
+ String osName = System.getProperty("os.name").toLowerCase();
+ return osName.startsWith("windows");
+ }
+
+ private void loadEnvironementData() throws SimplePluginException {
+ if (configuration == null) {
+ return;
+ }
+ Map<String, String> environement = System.getenv();
+ throwTrace("Loading environement");
+ for (String key : environement.keySet()) {
+ if (key.startsWith(ENVIRONEMENT_PREFIX)) {
+ String stringValue = environement.get(key);
+ key = key.substring(ENVIRONEMENT_PREFIX.length());
+ throwTrace(" " + key + ":" + stringValue);
+ Field field = null;
+
+ Class<?> class1 = configuration.getClass();
+ while (class1 != null) {
+ try {
+ field = class1.getDeclaredField(key);
+ } catch (Exception e) {
+ }
+ class1 = class1.getSuperclass();
+ }
+ if (field == null) {
+ continue;
+ }
+ field.setAccessible(true);
+ try {
+ if (field.getType() == String.class) {
+ field.set(configuration, stringValue);
+ } else if (field.getType() == int.class || field.getType() == Integer.class) {
+ field.set(configuration, Integer.parseInt(stringValue));
+ } else if (field.getType() == double.class || field.getType() == Double.class) {
+ field.set(configuration, Double.parseDouble(stringValue));
+ } else if (field.getType() == boolean.class || field.getType() == Boolean.class) {
+ field.set(configuration, Boolean.parseBoolean(stringValue));
+ } else if (field.getType().getSuperclass() == Enum.class) {
+ Enum newValue = Enum.valueOf((Class<Enum>) field.getType(), stringValue);
+ field.set(configuration, newValue);
+ } else {
+ this.throwError(new SimplePluginException("Unable to find conversion for : " + field.getType()));
+ continue;
+ }
+ } catch (Exception e) {
+ this.throwError(e);
+ continue;
+ }
+ }
+ }
+ }
+
+ /**
+ * This is a special notification used to send "speakable" messages to the
+ * server.
+ *
+ * @param content
+ * message content
+ */
+ public void throwMessage(String content, Object... arguments) {
+ String[] tmp = new String[arguments.length + 1];
+ tmp[0] = content;
+ for (int i = 0; i < arguments.length; i++) {
+ tmp[i + 1] = String.valueOf(arguments[i]);
+ }
+ throwNotification("message", tmp);
+ }
+
+ /**
+ * This method is used a starting point for the plugin. The standard way to
+ * use this adding in your inherited plugin class something like this :
+ *
+ * <pre>
+ * public static void main(String[] args) throws Exception {
+ * new MyBeautifulPlugin().boot(args, new MyPluginConfiguration());
+ * }
+ * </pre>
+ *
+ * @param arguments
+ * command line arguments (those you get with main
+ * @param configuration
+ * a new configuration object
+ */
+ protected void boot(String[] arguments, CONFIGURATION configuration) {
+ try {
+ if (arguments.length > 0) {
+ command = arguments[0];
+ }
+ this.configuration = configuration;
+ loadEnvironementData();
+ if (this.configuration.isDaemon())
+ {
+ stdInCom = new StdInCom();
+ StdInComObserver stdInComObserver = new StdInComObserver();
+ stdInCom.addListener(stdInComObserver);
+ stdInCom.start();
+ }
+ start();
+ if (!this.configuration.isDaemon())
+ {
+ onPluginStop();
+ }
+ } catch (Throwable e) {
+ throwError(e);
+ }
+ }
+
+ private String command = null;
+
+ /**
+ * @return the command
+ */
+ protected String getCommand() {
+ return command;
+ }
+
+ /**
+ * @param command
+ * the command to set
+ */
+ protected void setCommand(String command) {
+ this.command = command;
+ }
+
+ /**
+ * this method should be defined in your plugin class. This handle the main
+ * function of it. Be careful, if your make a plugin in "command mode" you
+ * should leave this as soon as possible. If your are making a "service"
+ * plugin, you can make you main loop here.
+ *
+ * @throws Throwable
+ * when something go wrong...
+ */
+ protected abstract void start() throws Throwable;
+
+ /**
+ * On plugin stop event.
+ * this method should be defined in your plugin class.
+ * @throws Throwable
+ * when something go wrong...
+ */
+ protected abstract void onPluginStop() throws Throwable;
+
+ /**
+ * Stop the plugin.
+ */
+ public void stop()
+ {
+ if (this.stdInCom != null)
+ {
+ this.stdInCom.stopPipe();
+ }
+ try {
+ this.onPluginStop();
+ } catch (Throwable e) {
+ this.throwError(e);
+ }
+ this.throwNotification("plugin", "exit");
+ }
+
+ /**
+ * This function throw a debug trace to the server. The server should have
+ * activate traces for this plugin in order to display them.
+ *
+ * @param message
+ * trace message
+ */
+ protected void throwTrace(String message) {
+ if (!configuration.isTraces()) {
+ return;
+ }
+ throwNotification("trace", message);
+ }
+
+ /**
+ * Throw the result of the "check" command to the framework.
+ *
+ * @param result
+ * Check command result
+ */
+ protected void throwResult(boolean result) {
+ String resultValue;
+ if (result) resultValue = "true";
+ else resultValue = "false";
+ throwNotification("check_result", resultValue);
+ }
+
+ /**
+ * When something go wrong, you can use this function to throw an exception
+ * to the server.
+ *
+ * @param throwable
+ * Exception to throw.
+ */
+ protected void throwError(Throwable throwable) {
+ if (configuration.isTraces()) {
+ final Writer result = new StringWriter();
+ final PrintWriter printWriter = new PrintWriter(result);
+ throwable.printStackTrace(printWriter);
+ throwNotification("error", result.toString());
+ } else {
+ throwNotification("error", throwable.getMessage());
+ }
+
+ }
+
+ protected File getStateFile(String name) {
+ // State files should stay in the working folder of plugins in order
+ // to be deleted when the plugin is updated (re-deployed)
+ File sessionId = new File("states");
+ sessionId.mkdirs();
+ sessionId = new File(sessionId, name);
+ return sessionId;
+ }
+
+ protected <E> E readState(Class<E> objectClass, String sessionId) {
+ try {
+ File file = getStateFile(sessionId);
+ E result;
+ if (file.exists()) {
+ ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(file));
+ result = (E) inputStream.readObject();
+ } else {
+
+ result = objectClass.newInstance();
+ }
+ return result;
+ } catch (Exception e) {
+ throwError(e);
+ return null;
+ }
+ }
+
+ protected void writeState(Object object, String sessionId) {
+ File file = getStateFile(sessionId);
+ try {
+ ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file));
+ outputStream.writeObject(object);
+ outputStream.close();
+ } catch (Exception e) {
+ throwError(e);
+ }
+ }
+
+}
Property changes on: software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePlugin.java
___________________________________________________________________
Name: svn:keywords
+ Id
Added: software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePluginConfiguration.java
===================================================================
--- software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePluginConfiguration.java (rev 0)
+++ software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePluginConfiguration.java 2009-06-03 08:32:45 UTC (rev 4728)
@@ -0,0 +1,136 @@
+/* This file is part of "Smart-Core Plugin Java Kit".
+ * Copyright 2008, kysoh
+ * Author : Yoran Brault
+ * eMail : software@_bad_karma-lab.net (remove _bad_ before sending an email)
+ * Site : http://www.kysoh.com/
+ *
+ * "Smart-Core Plugin Java Kit" is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * "Smart-Core Plugin Java Kit" is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with "Smart-Core Plugin Java Kit"; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package com.kysoh.tuxdroid.plugin.framework.plugin;
+
+public class SimplePluginConfiguration {
+ private boolean traces = false;
+ private int pitch = 100;
+ private String language = "en";
+ private String country = "US";
+ private String locutor = "Ryan";
+ private String ip = "127.0.0.1";
+ private boolean daemon = false;
+
+ /**
+ * @return the pitch
+ */
+ public int getPitch() {
+ return pitch;
+ }
+
+ /**
+ * @param pitch
+ * the pitch to set
+ */
+ public void setPitch(int pitch) {
+ this.pitch = pitch;
+ }
+
+ /**
+ * @return the language
+ */
+ public String getLanguage() {
+ return language;
+ }
+
+ /**
+ * @param language
+ * the language to set
+ */
+ public void setLanguage(String language) {
+ this.language = language;
+ }
+
+ /**
+ * @return the country
+ */
+ public String getCountry() {
+ return country;
+ }
+
+ /**
+ * @param country
+ * the country to set
+ */
+ public void setCountry(String country) {
+ this.country = country;
+ }
+
+ /**
+ * @return the locutor
+ */
+ public String getLocutor() {
+ return locutor;
+ }
+
+ /**
+ * @param locutor
+ * the locutor to set
+ */
+ public void setLocutor(String locutor) {
+ this.locutor = locutor;
+ }
+
+ /**
+ * @return the traces
+ */
+ public boolean isTraces() {
+ return traces;
+ }
+
+ /**
+ * @param traces
+ * the traces to set
+ */
+ public void setTraces(boolean traces) {
+ this.traces = traces;
+ }
+
+ /**
+ * @param httpserver ip address.
+ */
+ public void setIP(String IP)
+ {
+ this.ip = IP;
+ }
+
+
+ /**
+ * Return current used ip adress.
+ * @return
+ */
+ public String getIP()
+ {
+ return this.ip;
+ }
+
+ /**
+ * Get if the gadget is a daemon or not.
+ * @return
+ */
+ public boolean isDaemon()
+ {
+ return this.daemon;
+ }
+
+}
Property changes on: software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePluginConfiguration.java
___________________________________________________________________
Name: svn:keywords
+ Id
Added: software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePluginException.java
===================================================================
--- software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePluginException.java (rev 0)
+++ software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePluginException.java 2009-06-03 08:32:45 UTC (rev 4728)
@@ -0,0 +1,45 @@
+/* This file is part of "Smart-Core Plugin Java Kit".
+ * Copyright 2008, kysoh
+ * Author : Yoran Brault
+ * eMail : software@_bad_karma-lab.net (remove _bad_ before sending an email)
+ * Site : http://www.kysoh.com/
+ *
+ * "Smart-Core Plugin Java Kit" is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * "Smart-Core Plugin Java Kit" is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with "Smart-Core Plugin Java Kit"; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package com.kysoh.tuxdroid.plugin.framework.plugin;
+
+public class SimplePluginException extends Exception {
+
+ private static final long serialVersionUID = 1L;
+
+ public SimplePluginException() {
+ super();
+ }
+
+ public SimplePluginException(String message) {
+ super(message);
+ }
+
+ public SimplePluginException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public SimplePluginException(Throwable cause) {
+ super(cause);
+ }
+
+}
Property changes on: software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/SimplePluginException.java
___________________________________________________________________
Name: svn:keywords
+ Id
Added: software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/StdInCom.java
===================================================================
--- software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/StdInCom.java (rev 0)
+++ software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/StdInCom.java 2009-06-03 08:32:45 UTC (rev 4728)
@@ -0,0 +1,133 @@
+/* This file is part of "Smart-Core Plugin Java Kit" library.
+ * Copyright 2009, kysoh
+ * Author : Remi Jocaille
+ * eMail : rem...@c2...
+ * Site : http://www.kysoh.com/
+ *
+ * "Smart-Core Plugin Java Kit" is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * "Smart-Core Plugin Java Kit" is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with "Smart-Core Plugin Java Kit"; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package com.kysoh.tuxdroid.plugin.framework.plugin;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+public class StdInCom extends Thread
+{
+ private boolean isRun = false;
+ private Object runMutex = new Object();
+ private StdInComListener stdInComListener = null;
+
+ /**
+ * Add a listener.
+ * @param StdInComListener Listener.
+ */
+ public void addListener(StdInComListener listener)
+ {
+ stdInComListener = listener;
+ }
+
+ /*
+ * Set the run state of the communication handling.
+ */
+ private void setRun(boolean value)
+ {
+ synchronized (runMutex)
+ {
+ isRun = value;
+ }
+ }
+
+ /*
+ * Get the run state of the communication handling.
+ */
+ private boolean getRun()
+ {
+ boolean result;
+ synchronized (runMutex)
+ {
+ result = isRun;
+ }
+ return result;
+ }
+
+ /**
+ * Stop the communication handling.
+ */
+ @SuppressWarnings("deprecation")
+ public void stopPipe()
+ {
+ if (!getRun())
+ {
+ return;
+ }
+ setRun(false);
+ try
+ {
+ join(500);
+ }
+ catch (InterruptedException e) {}
+ if (isAlive())
+ {
+ stop();
+ }
+ }
+
+ /**
+ * Loop to listening the commands from the host application.
+ */
+ @SuppressWarnings("static-access")
+ public void run()
+ {
+ if (getRun())
+ {
+ return;
+ }
+ setRun(true);
+ BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
+ while (getRun())
+ {
+ // Read the next received command
+ String rcvLine;
+ try
+ {
+ while (!stdin.ready())
+ {
+ try {
+ this.sleep(200);
+ } catch (InterruptedException e) {}
+ }
+ rcvLine = stdin.readLine();
+ }
+ catch (IOException e)
+ {
+ break;
+ }
+ if (rcvLine.toLowerCase().startsWith("stop"))
+ {
+ if (stdInComListener != null)
+ {
+ stdInComListener.stopped();
+ }
+ this.setRun(false);
+ }
+ try {
+ this.sleep(100);
+ } catch (InterruptedException e) {}
+ }
+ }
+}
Property changes on: software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/StdInCom.java
___________________________________________________________________
Name: svn:keywords
+ Id
Added: software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/StdInComListener.java
===================================================================
--- software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/StdInComListener.java (rev 0)
+++ software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/StdInComListener.java 2009-06-03 08:32:45 UTC (rev 4728)
@@ -0,0 +1,28 @@
+/* This file is part of "Smart-Core Plugin Java Kit" library.
+ * Copyright 2009, kysoh
+ * Author : Remi Jocaille
+ * eMail : rem...@c2...
+ * Site : http://www.kysoh.com/
+ *
+ * "Smart-Core Plugin Java Kit" is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * "Smart-Core Plugin Java Kit" is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with "Smart-Core Plugin Java Kit"; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package com.kysoh.tuxdroid.plugin.framework.plugin;
+
+public interface StdInComListener
+{
+ void stopped();
+}
Property changes on: software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/sources/com/kysoh/tuxdroid/plugin/framework/plugin/StdInComListener.java
___________________________________________________________________
Name: svn:keywords
+ Id
|
|
From: remi <c2m...@c2...> - 2009-06-03 08:10:21
|
Author: remi Date: 2009-06-03 10:10:12 +0200 (Wed, 03 Jun 2009) New Revision: 4727 Removed: software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/.classpath software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/.project Log: * removed useless files Deleted: software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/.classpath =================================================================== --- software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/.classpath 2009-06-03 07:44:32 UTC (rev 4726) +++ software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/.classpath 2009-06-03 08:10:12 UTC (rev 4727) @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="src" path="sources"/> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> - <classpathentry kind="output" path="targets/eclipse"/> -</classpath> Deleted: software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/.project =================================================================== --- software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/.project 2009-06-03 07:44:32 UTC (rev 4726) +++ software_suite_v3/smart-core/smart-dev/plugin-toolkit/java/simpleplugin-java-kit/trunk/.project 2009-06-03 08:10:12 UTC (rev 4727) @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>tuxdroid-gadget-java-kit</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.jdt.core.javabuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.jdt.core.javanature</nature> - </natures> -</projectDescription> |
|
From: remi <c2m...@c2...> - 2009-06-03 07:44:43
|
Author: remi
Date: 2009-06-03 09:44:32 +0200 (Wed, 03 Jun 2009)
New Revision: 4726
Modified:
software_suite_v3/smart-core/smart-server/trunk/util/SimplePlugin/SimplePlugin.py
software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/plugin/interpreters/PluginInterpreter.py
Log:
* added handling of the events from the server to the pyhton SimplePlugin call
* fixed event header name (uppercase to lowercase)
Modified: software_suite_v3/smart-core/smart-server/trunk/util/SimplePlugin/SimplePlugin.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/util/SimplePlugin/SimplePlugin.py 2009-06-02 14:35:56 UTC (rev 4725)
+++ software_suite_v3/smart-core/smart-server/trunk/util/SimplePlugin/SimplePlugin.py 2009-06-03 07:44:32 UTC (rev 4726)
@@ -53,6 +53,14 @@
pass
# --------------------------------------------------------------------------
+ # On plugin event. Must be overrided
+ # --------------------------------------------------------------------------
+ def onPluginEvent(self, eventName, eventValues):
+ """On plugin event. Must be overrided
+ """
+ pass
+
+ # --------------------------------------------------------------------------
# Stop the plugin.
# --------------------------------------------------------------------------
def stop(self):
@@ -98,6 +106,20 @@
if line.lower().find("stop") == 0:
self.onPluginStop()
self.__setRun(False)
+ elif line.lower().find("event") == 0:
+ sltLine = line.split(":")
+ # Get event name
+ if len(sltLine) > 1:
+ eventName = sltLine[1]
+ # Get event values
+ eventValues = []
+ if len(sltLine) > 2:
+ for value in sltLine[2:]:
+ eventValues.append(value)
+ # Callback
+ t = threading.Thread(target = self.onPluginEvent,
+ args = (eventName, eventValues))
+ t.start()
time.sleep(0.1)
# --------------------------------------------------------------------------
Modified: software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/plugin/interpreters/PluginInterpreter.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/plugin/interpreters/PluginInterpreter.py 2009-06-02 14:35:56 UTC (rev 4725)
+++ software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/plugin/interpreters/PluginInterpreter.py 2009-06-03 07:44:32 UTC (rev 4726)
@@ -234,7 +234,7 @@
return
if not self.__daemon:
return
- eventString = "EVENT:"
+ eventString = "event:"
eventString += eventName
for value in eventValues:
eventString += ":" + str(value)
|
|
From: jerome <c2m...@c2...> - 2009-06-02 14:36:04
|
Author: jerome Date: 2009-06-02 16:35:56 +0200 (Tue, 02 Jun 2009) New Revision: 4725 Modified: software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/images/ico/activity.ico software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/images/ico/connected.ico software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/images/ico/error.ico software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/images/ico/offline.ico Log: * Updated icons. Modified: software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/images/ico/activity.ico =================================================================== (Binary files differ) Modified: software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/images/ico/connected.ico =================================================================== (Binary files differ) Modified: software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/images/ico/error.ico =================================================================== (Binary files differ) Modified: software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/images/ico/offline.ico =================================================================== (Binary files differ) |
|
From: jerome <c2m...@c2...> - 2009-06-02 14:34:57
|
Author: jerome
Date: 2009-06-02 16:34:50 +0200 (Tue, 02 Jun 2009)
New Revision: 4724
Modified:
software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/Unit1.dcu
software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/Unit1.dfm
software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/Unit1.pas
Log:
* Updated the way to get server state informations.
Modified: software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/Unit1.dcu
===================================================================
(Binary files differ)
Modified: software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/Unit1.dfm
===================================================================
--- software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/Unit1.dfm 2009-06-02 14:34:29 UTC (rev 4723)
+++ software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/Unit1.dfm 2009-06-02 14:34:50 UTC (rev 4724)
@@ -77,8 +77,8 @@
object PopupMenu1: TPopupMenu
Images = PngImageList1
OnPopup = PopupMenu1Popup
- Left = 112
- Top = 168
+ Left = 8
+ Top = 8
object ShowHide1: TMenuItem
Caption = 'Show/Hide'
ImageIndex = 4
@@ -712,14 +712,14 @@
Name = 'PngImage5'
Background = clWindow
end>
- Left = 152
- Top = 80
+ Left = 40
+ Top = 8
end
object ImageList1: TImageList
- Left = 208
- Top = 160
+ Left = 72
+ Top = 8
Bitmap = {
- 494C010105000900040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+ 494C010105000900040010001000FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600
0000000000003600000028000000400000003000000001002000000000000030
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
@@ -850,32 +850,32 @@
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
- 00000000000000000000523F3CFF47363AFF523F3CFF281D19FF041A20FF0940
- 4FFF353535FF0000000000000000000000000000000000000000000000000000
+ 000000000000000000002D1307FF2D1307FF2D1307FF180B05FF0F252BFF0940
+ 4FFF404040FF0000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
- 0000572616FF70422CFF997868FFAD9387FFAD9387FF070F11FF1ABFEDFF1CCC
- FDFF17A6CEFF0A2026FF00000000000000000000000000000000000000000000
+ 0000592811FF70422CFF997868FFAD9387FFAD9387FF070F11FF1ABFEDFF1CCC
+ FDFF17A6CEFF13292FFF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
- 000000000000000000000000000000000000000000000000000046293CFF6535
+ 0000000000000000000000000000000000000000000000000000987868FF6535
1DFFA3724AFFD8B48DFFD4AD82FFE0C3A4FF989089FF0E667FFF1CCCFDFF1CCC
- FDFF1CCCFDFF19B3DDFF0A1618FF000000000000000000000000000000000000
+ FDFF1CCCFDFF19B3DDFF111D1FFF000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
- 00000000000000000000000000000000000000000000432943FF683315FFD3B7
+ 00000000000000000000000000000000000000000000A38577FF683315FFD3B7
9DFFDCBC99FFC18749FFC18749FFC18749FF1A1E19FF1ABFEDFF1CCCFDFF1CCC
- FDFF1CCCFDFF1CCCFDFF1599BEFF545454FF0000000000000000000000000000
+ FDFF1CCCFDFF1CCCFDFF1599BEFF606060FF0000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
@@ -889,7 +889,7 @@
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
- 00000000000000000000000000000000000046253FFF814B24FFC58F54FFFBF8
+ 000000000000000000000000000000000000987868FF814B24FFC58F54FFFBF8
F4FFFFFFFFFFFFFFFFFFE0C3A4FF48331BFF17A6CEFF1CCCFDFF1CCCFDFF1CCC
FDFF1CCCFDFF1CCCFDFF1CCCFDFF0C596FFF0000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
@@ -897,9 +897,9 @@
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
- 000000000000000000000000000000000000572617FFAE753EFFD1A577FFFFFF
+ 00000000000000000000000000000000000065341DFFAE753EFFD1A577FFFFFF
FFFFFFFFFFFFFFFFFFFFDCBC99FF3C2A17FF19B3DDFF1CCCFDFF1CCCFDFF1CCC
- FDFF1CCCFDFF17A6CEFF138CAEFF031B22FF0000000000000000000000000000
+ FDFF1CCCFDFF17A6CEFF138CAEFF0C2228FF0000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
@@ -907,7 +907,7 @@
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000005B270EFFC18749FFC99660FFFFFF
FFFFF7F0E8FFD8B48DFFC18749FF956D42FF132930FF09404FFF303030FF1329
- 30FF09404FFF302212FF472C16FF271517FF0000000000000000000000000000
+ 30FF09404FFF302212FF472C16FF241007FF0000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
@@ -915,7 +915,7 @@
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000005B270EFFC99660FFF7F0E8FFE8D2
BBFFD1A577FFC18749FFC18749FFE0C3A4FFEFEFEFFFEFEFEFFFFFFFFFFFFFFF
- FFFFEFEFEFFFC58F54FF8E572CFF41314BFF0000000000000000000000000000
+ FFFFEFEFEFFFC58F54FF8E572CFF2D1307FF0000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
@@ -923,13 +923,13 @@
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000005B270EFFD6B695FFF7F0E8FFF0E1
D2FFC18749FFC18749FFC18749FFD4AD82FFFFFFFFFFF7F0E8FFFBF8F4FFFFFF
- FFFFFFFFFFFFF3E9DDFF814B24FF4B3D49FF0000000000000000000000000000
+ FFFFFFFFFFFFF3E9DDFF814B24FF2D1307FF0000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000004F2429FFB29077FFFFFFFFFFFBF8
+ 000000000000000000000000000000000000794F3BFFB29077FFFFFFFFFFFBF8
F4FFC58F54FFC18749FFC18749FFDCBC99FFFBF8F4FFF3E9DDFFFFFFFFFFFFFF
FFFFFBF8F4FFFFFFFFFF65351DFF000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
@@ -937,15 +937,15 @@
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000003F2450FF764830FFFBF8F4FFFFFF
+ 000000000000000000000000000000000000AC9286FF764830FFFBF8F4FFFFFF
FFFFE8D2BBFFCD9E6BFFC18749FFC58F54FFECDAC6FFFFFFFFFFFFFFFFFFFFFF
- FFFFFFFFFFFFC2AEA5FF54261EFF000000000000000000000000000000000000
+ FFFFFFFFFFFFC2AEA5FF51222AFF000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
- 00000000000000000000000000000000000000000000552820FFA98C7BFFFFFF
+ 000000000000000000000000000000000000000000004F220CFFA98C7BFFFFFF
FFFFFFFFFFFFF7F0E8FFCD9E6BFFC18749FFDCBC99FFE8D2BBFFFFFFFFFFFFFF
FFFFDCCFC6FF65351DFF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
@@ -953,24 +953,24 @@
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
- 00000000000000000000000000000000000000000000000000005C2B19FFA98C
+ 0000000000000000000000000000000000000000000000000000552410FFA98C
7BFFECDAC6FFFBF8F4FFFBF8F4FFD4AD82FFC18749FFC58F54FFE0C3A4FFBD93
- 6BFF612D12FF46293EFF00000000000000000000000000000000000000000000
+ 6BFF612D12FF381808FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
- 000000000000000000000000000000000000000000000000000000000000572A
- 21FF6E3919FFAE896CFFD2AE8AFFC18749FFC18749FFAE753EFF814B24FF5B27
- 0EFF432945FF0000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000004F22
+ 0CFF6E3919FFAE896CFFD2AE8AFFC18749FFC18749FFAE753EFF814B24FF5B27
+ 0EFFA38577FF0000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
- 00003F2450FF4F2429FF5B270EFF5B270EFF5B270EFF572617FF46253FFF0000
+ 0000AC9286FF794F3BFF5B270EFF5B270EFF5B270EFF65341DFF987868FF0000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
@@ -978,134 +978,134 @@
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
- 00000000000000000000AC9286FF8E6A59FFAC9286FF8A8481FF606060FF0000
+ 00000000000000000000101010FF000000FF000000FF606060FF000000000000
0000000000000000000000000000000000000000000000000000000000000000
- 00000000000000000000719143FF52831CFF719143FF4C5440FF242424FF0000
+ 00000000000000000000010101FF000000FF000000FF242424FF000000000000
0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000FF000000FF000000FF0E0E0EFF000000000000
0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000FF000000FF000000FF050505FF000000000000
0000000000000000000000000000000000000000000000000000000000000000
- 000000000000000000004A596AFF354666FF4A596AFF2A2E32FF0E0E0EFF0000
- 0000000000000000000000000000000000000000000000000000000000009878
- 68FF5B270EFF7A503BFFA38677FFAD9387FF624E45FF0B4D5FFF1599BEFF0E66
- 7FFF313C3FFF0000000000000000000000000000000000000000000000005A86
- 27FF369000FF5CA530FF8EC170FF9BC880FF547640FF0B4D5FFF1599BEFF0E66
- 7FFF0A171BFF0000000000000000000000000000000000000000000000000000
- 0000278376FF217DD5FF1977EDFF1977EDFF1977EDFF104F9AFF04232BFF0B4D
- 5FFF020405FF0000000000000000000000000000000000000000000000003647
- 6EFF242292FF4D4BA6FF8483C2FF9291C9FF4D4D77FF0B4D5FFF1599BEFF0E66
- 7FFF010D10FF00000000000000000000000000000000000000006F422CFF7648
- 30FFA86F3AFFE4CBAFFFD4AD82FFE4CBAFFF222D30FF1ABFEDFF1CCCFDFF1CCC
- FDFF17A6CEFF111D1FFF000000000000000000000000000000003D8506FF4CA1
- 2BFF10BB85FF91E7DDFF52DAC9FF91E7DDFF222D30FF1ABFEDFF1CCCFDFF1CCC
- FDFF17A6CEFF020F11FF00000000000000000000000000000000000000001C79
- E1FF1893EEFF8BD0F7FFFFFFFFFFFFFFFFFFFFFFFFFF323D40FF1ABFEDFF1CCC
- FDFF19B3DDFF052730FF00000000000000000000000000000000252D89FF3F3C
- A5FF1D09CEFF9B8FF2FF6250EBFF9B8FF2FF222D30FF1ABFEDFF1CCCFDFF1CCC
- FDFF17A6CEFF010F12FF0000000000000000000000006F422CFF814B24FFECDA
- C6FFC58F54FFC18749FFC18749FF79542EFF0B4D5FFF1CCCFDFF1CCCFDFF1CCC
- FDFF1CCCFDFF1599BEFF404040FF00000000000000003D8506FF23A542FFB0EE
- E7FF13CCB6FF03C9B1FF03C9B1FF027E6FFF0B4D5FFF1CCCFDFF1CCCFDFF1CCC
- FDFF1CCCFDFF1599BEFF101010FF0000000000000000000000001977EDFF7DC7
- F6FF4EECF5FF7AF0F8FFFFFFFFFF9B9A9BFFF1F1F1FFB6E2EFFF1CCCFDFF1CCC
- FDFF1CCCFDFF1ABFEDFF041A20FF0000000000000000252D89FF2015B0FFB7AF
- F6FF2810E4FF1A00E2FF1A00E2FF10008DFF0B4D5FFF1CCCFDFF1CCCFDFF1CCC
- FDFF1CCCFDFF1599BEFF010708FF00000000987868FF753F1DFFC18749FFF3E9
- DDFFF3E9DDFFD4AD82FFC18749FF1A1E19FF1ABFEDFF1CCCFDFF1CCCFDFF1CCC
- FDFF1CCCFDFF1CCCFDFF0B4D5FFF000000005A8627FF299E2CFF03C9B1FFD0F5
- F0FFD0F5F0FF52DAC9FF03C9B1FF022626FF1ABFEDFF1CCCFDFF1CCCFDFF1CCC
- FDFF1CCCFDFF1CCCFDFF0B4D5FFF00000000000000001A79E1FF15BCF0FF89F2
- F9FFD3FAFDFFD3FAFDFF9B9A9BFF1B171AFF626062FFFFFFFFFF1CCCFDFF1CCC
- FDFF1CCCFDFF1CCCFDFF1599BEFF363636FF36476EFF221CA1FF1A00E2FFD4CF
- FAFFD4CFFAFF6250EBFF1A00E2FF050D2CFF1ABFEDFF1CCCFDFF1CCCFDFF1CCC
- FDFF1CCCFDFF1CCCFDFF0B4D5FFF000000005B270EFFA86F3AFFD4AD82FFFFFF
- FFFFE5EBDFFFD8E1CFFF99744EFF0B4D5FFF1CCCFDFF1CCCFDFF1CCCFDFF1CCC
- FDFF1CCCFDFF1CCCFDFF1599BEFF7F7F7FFF369000FF10BB85FF52DAC9FFFFFF
- FFFFFFFFFFFFFFFFFFFF229E8FFF0B4D5FFF1CCCFDFF1CCCFDFF1CCCFDFF1CCC
- FDFF1CCCFDFF1CCCFDFF1599BEFF3F3F3FFF278376FF1893EEFF13E5F2FFD3FA
- FDFFFFFFFFFFFFFFFFFFF1F1F1FF626062FFD4D4D4FFD4F5FFFF1CCCFDFF1CCC
- FDFF1CCCFDFF1CCCFDFF1CCCFDFF05262FFF242292FF1D09CEFF6250EBFFFFFF
- FFFFFFFFFFFFFFFFFFFF3020ADFF0B4D5FFF1CCCFDFF1CCCFDFF1CCCFDFF1CCC
- FDFF1CCCFDFF1CCCFDFF1599BEFF021317FF6E3919FFC18749FFE0C3A4FFFFFF
- FFFF719050FF305D00FF6F6E64FF138CAEFF1CCCFDFF1CCCFDFF1CCCFDFF1CCC
- FDFF1CCCFDFF1CCCFDFF17A6CEFF606060FF2C9B21FF03C9B1FF81E4D8FFFFFF
- FFFFFFFFFFFFEFFCFAFF607976FF138CAEFF1CCCFDFF1CCCFDFF1CCCFDFF1CCC
- FDFF1CCCFDFF1CCCFDFF17A6CEFF242424FF1B7BD3FF15C3F0FF4EECF5FFFFFF
- FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55D9FEFF1CCCFDFF1CCC
- FDFF1CCCFDFF1CCCFDFF1CCCFDFF0B4D5FFF221CA1FF1A00E2FF8D80F1FFFFFF
- FFFFFFFFFFFFF1EFFDFF63607CFF138CAEFF1CCCFDFF1CCCFDFF1CCCFDFF1CCC
- FDFF1CCCFDFF1CCCFDFF17A6CEFF05222AFF51410CFF546812FF5C7729FF7190
- 50FF4A7120FF305D00FF363C0EFF10738EFF1CCCFDFF17A6CEFF17A6CEFF1CCC
- FDFF1599BEFF0E667FFF07333FFF908681FF20A94DFF03C9B1FF81E4D8FFFFFF
- FFFFEFFCFAFF52DAC9FF027164FF10738EFF1CCCFDFF17A6CEFF17A6CEFF1CCC
- FDFF1599BEFF0E667FFF07333FFF525E40FF1977EDFF13E5F2FF3FEAF4FFFFFF
- FFFFFFFFFFFFC4F9FCFFFFFFFFFFC6C5C6FFF1F1F1FF8EE6FEFF1599BEFF19B3
- DDFF1CCCFDFF12809EFF0E667FFF061313FF2013B5FF1A00E2FF8D80F1FFFFFF
- FFFFF1EFFDFF6250EBFF0F007FFF10738EFF1CCCFDFF17A6CEFF17A6CEFF1CCC
- FDFF1599BEFF0E667FFF07333FFF0A0F24FF584710FF5C7729FF4A7120FF305D
- 00FF305D00FF305D00FF516212FF182005FF121D20FF122300FF122300FF071F
- 20FF434640FF485012FF523C10FF8E6A59FF1DAD59FF52DAC9FFE0F8F5FF71E1
- D3FF13CCB6FF03C9B1FF03BCA6FF304946FF121D20FF606060FF606060FF1329
- 30FF505050FF029785FF1C9342FF52831CFF1977EDFF22E7F3FFD3FAFDFFA7F5
- FAFF4EECF5FF4EECF5FFFFFFFFFF1B171AFFC6C5C6FF9F9F9FFF707070FF5050
- 50FF233940FF0A7379FF126EB3FF347575FF1F11BAFF6250EBFFE2DFFBFF7E70
- EFFF2810E4FF1A00E2FF1800D4FF33304CFF121D20FF606060FF606060FF1329
- 30FF505050FF1400AAFF1C119EFF283C89FF885128FFF7F0E8FFB8B186FF305D
- 00FF305D00FF305D00FF396005FF305D00FF648640FF3D6710FF305D00FF7190
- 50FFFFFFFFFFE0C3A4FF885128FFAC9286FF20A94DFFE0F8F5FF81E4D8FFD0F5
- F0FF13CCB6FF03C9B1FF03C9B1FFB0EEE7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
- FFFFFFFFFFFF81E4D8FF20A94DFF719143FF1977EDFF7AF0F8FFD3FAFDFFD3FA
- FDFF22E7F3FF4EECF5FFFFFFFFFF1B171AFFAAA8A9FFFFFFFFFFFFFFFFFFFFFF
- FFFFFFFFFFFF7AF0F8FF1893EEFF000000002013B5FFE2DFFBFF8D80F1FFD4CF
- FAFF2810E4FF1A00E2FF1A00E2FFB7AFF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
- FFFFFFFFFFFF8D80F1FF2013B5FF3C5585FF6E3919FFF7F0E8FFFFFFFFFF3D67
- 10FF305D00FF5D6A17FF305D00FF305D00FF8C985DFF607E34FF305D00FF98AE
- 80FFFFFFFFFFFFFFFFFF764830FF000000002C9B21FFE0F8F5FFFFFFFFFF91E7
- DDFF03C9B1FF03C9B1FF03C9B1FF91E7DDFFD0F5F0FFC0F2ECFFE0F8F5FFFFFF
- FFFFFFFFFFFFFFFFFFFF4CA12BFF000000001B7BD3FF7CCEF6FFFFFFFFFFF0FD
- FEFF13E5F2FF89F2F9FFD4D4D4FF1B171AFF8D8B8DFFF0FDFEFFF0FDFEFFF0FD
- FEFFFFFFFFFFE2F5FDFF1977EDFF00000000221CA1FFE2DFFBFFFFFFFFFF9B8F
- F2FF1A00E2FF1A00E2FF1A00E2FF9B8FF2FFD4CFFAFFC6BFF8FFE2DFFBFFFFFF
- FFFFFFFFFFFFFFFFFFFF3F3CA5FF000000005B270EFFD2C2B7FFFFFFFFFF7190
- 50FF305D00FFA67F3BFF305D00FF305D00FF98AE80FF98AE80FF305D00FFCBD7
- BFFFFFFFFFFFD6C9C3FF5B270EFF00000000369000FFBDE0BAFFFFFFFFFFEFFC
- FAFF23D0BBFF03C9B1FF03C9B1FF71E1D3FFEFFCFAFFFFFFFFFFFFFFFFFFFFFF
- FFFFFFFFFFFFCDE3BFFF369000FF00000000278376FF4497F1FFFFFFFFFFFFFF
- FFFF89F2F9FF89F2F9FFC6C5C6FF1B171AFF8D8B8DFFFFFFFFFFFFFFFFFFFFFF
- FFFFFFFFFFFF8CBBF6FF1E7BC0FF00000000242292FFBAB8E2FFFFFFFFFFF1EF
- FDFF3720E6FF1A00E2FF1A00E2FF7E70EFFFF1EFFDFFFFFFFFFFFFFFFFFFFFFF
- FFFFFFFFFFFFC8C8E4FF242292FF00000000987868FF784728FFFFFFFFFFD8E1
- CFFFB1C29FFFDCBC99FF426209FF305D00FFBECCAFFFE3D7C2FFA4B88FFFFFFF
- FFFFFFFFFFFF7A503BFF987868FF000000005A8627FF39A231FFFFFFFFFFFFFF
- FFFFE0F8F5FF71E1D3FF03C9B1FF03C9B1FFE0F8F5FFC0F2ECFFFFFFFFFFFFFF
- FFFFFFFFFFFF5CA530FF5A8627FF00000000000000001B79E1FF8BC9F7FFF0FD
- FEFFFFFFFFFFFFFFFFFFC6C5C6FF1B171AFF8D8B8DFFFFFFFFFFFFFFFFFFFFFF
- FFFFC5E4FBFF2780EEFF000000000000000036476EFF302CA3FFFFFFFFFFFFFF
- FFFFE2DFFBFF7E70EFFF1A00E2FF1A00E2FFE2DFFBFFC6BFF8FFFFFFFFFFFFFF
- FFFFFFFFFFFF4D4BA6FF304681FF000000000000000065341DFF997868FFF0E1
- D2FFF7F0E8FFFFFFFFFF8BA470FF305D00FFA58C4EFFD4AD82FFFBF8F4FFECDA
- C6FF895A3BFF6F422CFF000000000000000000000000388902FF81BA60FFC0F2
- ECFFE0F8F5FFFFFFFFFFA1EBE2FF42D7C5FF23D0BBFF52DAC9FFEFFCFAFFB0EE
- E7FF42AC4CFF3D8506FF000000000000000000000000000000001977EDFF7DC7
- F6FFE2FCFDFFE2FCFDFFE3E2E2FF8D8B8DFFC6C5C6FFE2FCFDFF7AF0F8FF7BDC
- F7FF197EEDFF297C87FF000000000000000000000000252D88FF7675BBFFC6BF
- F8FFE2DFFBFFFFFFFFFFA99FF4FF5340E9FF3720E6FF6250EBFFF1EFFDFFB7AF
- F6FF3D35B4FF242D90FF000000000000000000000000000000006F422CFF7C4E
- 34FFBF9C7FFFFBF8F4FFDBC8ABFF947A32FFC18749FFC18749FFA86F3AFF753F
- 1DFF6F422CFF00000000000000000000000000000000000000003D8506FF49A5
- 36FF6ECFA2FFEFFCFAFF91E7DDFF03C9B1FF03C9B1FF03C9B1FF10BB85FF299E
- 2CFF3D8506FF0000000000000000000000000000000000000000000000001C79
- E1FF1893EEFF5FCBF5FFB5F7FBFFC4F9FCFFC4F9FCFF5ED9F5FF17A0EFFF1977
- EDFF2A7D79FF0000000000000000000000000000000000000000252D89FF3F3C
- A5FF7268D9FFF1EFFDFF9B8FF2FF1A00E2FF1A00E2FF1A00E2FF1D09CEFF221C
- A1FF242D8EFF0000000000000000000000000000000000000000000000009878
- 68FF5B270EFF6E3919FF8E572CFF8E572CFF885128FF6E3919FF5B270EFF9878
- 68FF000000000000000000000000000000000000000000000000000000005A86
- 27FF369000FF2C9B21FF1DAD59FF1DAD59FF20A94DFF2C9B21FF369000FF5A86
- 27FF000000000000000000000000000000000000000000000000000000000000
- 0000278376FF1B7BD3FF1977EDFF1977EDFF1977EDFF1A79E0FF238093FF0000
- 0000000000000000000000000000000000000000000000000000000000003647
- 6EFF242292FF221CA1FF2013B5FF1F11BAFF2013B5FF221CA1FF242292FF3546
- 73FF00000000000000000000000000000000424D3E000000000000003E000000
+ 000000000000010D10FF0C809EFF13CCFDFF0E99BEFF05333FFF101010FF0000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000D00FF008100FF00CF00FF009B00FF003400FF010101FF0000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000001010FF009F9FFF00FFFFFF00BFBFFF004040FF000000FF0000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000010010FF0C009EFF1300FDFF0E00BEFF05003FFF000000FF0000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000202020FF0B738EFF13CCFDFF13CCFDFF13CCFDFF0FC2CEFF0A667FFF0000
+ 00FF000000000000000000000000000000000000000000000000000000000000
+ 0000040404FF007400FF00CF00FF00CF00FF00CF00FF00CF00FF006800FF0000
+ 00FF000000000000000000000000000000000000000000000000000000000000
+ 0000010101FF008F8FFF00FFFFFF02F1F1FF07C5C6FF02F1F1FF008080FF0000
+ 00FF000000000000000000000000000000000000000000000000000000000000
+ 0000000000FF0B008EFF1300FDFF1300FDFF1300FDFF1300FDFF0A007FFF0000
+ 00FF000000000000000000000000000000000000000000000000000000000000
+ 0000021A20FF13CCFDFF13CCFDFF13CCFDFF11C5DDFF009500FF0CB79EFF0C80
+ 9EFF000000FF0000000000000000000000000000000000000000000000000000
+ 0000001A00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF0081
+ 00FF000000FF0000000000000000000000000000000000000000000000000000
+ 0000002020FF00FFFFFF00FFFFFF116E70FF1B171AFF116E70FF00FFFFFF009F
+ 9FFF000000FF0000000000000000000000000000000000000000000000000000
+ 0000020020FF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF0C00
+ 9EFF000000FF0000000000000000000000000000000000000000000000004040
+ 40FF0A667FFF13CCFDFF13CCFDFF13CCFDFF0EBEBEFF009500FF07AA5FFF13CC
+ FDFF08596FFF101010FF00000000000000000000000000000000000000001010
+ 10FF006800FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF
+ 00FF005B00FF010101FF00000000000000000000000000000000000000000404
+ 04FF008080FF00FFFFFF00FFFFFF116E70FF1B171AFF116E70FF00FFFFFF00FF
+ FFFF007070FF000000FF00000000000000000000000000000000000000000101
+ 01FF0A007FFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300
+ FDFF08006FFF000000FF00000000000000000000000000000000000000000000
+ 00FF11B3DDFF13CCFDFF0AB17FFF0FC2CEFF0DBBAEFF009500FF049F2FFF13CC
+ FDFF13CCFDFF05333FFF606060FF000000000000000000000000000000000000
+ 00FF00B500FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF
+ 00FF00CF00FF003400FF242424FF000000000000000000000000000000000000
+ 00FF00DFDFFF00FFFFFF00FFFFFF00FFFFFF07C5C6FF00FFFFFF00FFFFFF00FF
+ FFFF00FFFFFF004040FF0E0E0EFF000000000000000000000000000000000000
+ 00FF1100DDFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300
+ FDFF1300FDFF05003FFF050505FF000000000000000000000000404040FF0546
+ 3FFF0EBEBEFF0EBEBEFF009500FF07AA5FFF0AB17FFF009500FF009500FF0FC2
+ CEFF0EBEBEFF0CA59EFF000000FF000000000000000000000000101010FF004E
+ 00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF
+ 00FF00CF00FF00B500FF000000FF000000000000000000000000040404FF0060
+ 60FF00FFFFFF00FFFFFF00FFFFFF03E2E2FF0E8B8DFF03E2E2FF00FFFFFF00FF
+ FFFF00FFFFFF00DFDFFF000000FF000000000000000000000000010101FF0700
+ 5FFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300
+ FDFF1300FDFF1100DDFF000000FF000000000000000000000000000000FF0082
+ 00FF009500FF009500FF009500FF019810FF08AD6FFF009500FF009500FF0095
+ 00FF009500FF009500FF003800FF606060FF0000000000000000000000FF00B5
+ 00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF
+ 00FF00CF00FF00CF00FF004E00FF242424FF0000000000000000000000FF00DF
+ DFFF00FFFFFF00FFFFFF00FFFFFF08B7B7FF1B171AFF08B7B7FF00FFFFFF00FF
+ FFFF00FFFFFF00FFFFFF006060FF0E0E0EFF0000000000000000000000FF1100
+ DDFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300
+ FDFF1300FDFF1300FDFF07005FFF050505FF00000000707070FF06494FFF0EBE
+ BEFF08AD6FFF009500FF009500FF009500FF019810FF05A33FFF009500FF0095
+ 00FF0EBEBEFF13CCFDFF0D8CAEFF202020FF00000000313131FF004E00FF00CF
+ 00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF
+ 00FF00CF00FF00CF00FF008E00FF040404FF00000000161616FF006060FF00FF
+ FFFF00FFFFFF00FFFFFF00FFFFFF0E8B8DFF1B171AFF0E8B8DFF00FFFFFF00FF
+ FFFF00FFFFFF00FFFFFF00AFAFFF010101FF000000000A0A0AFF07005FFF1300
+ FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300
+ FDFF1300FDFF1300FDFF0D00AEFF000000FF00000000202020FF0D8CAEFF13CC
+ FDFF11C5DDFF009500FF049F2FFF009500FF009500FF07AA5FFF049F2FFF0095
+ 00FF12C9EDFF13CCFDFF12BFEDFF000000FF00000000040404FF008E00FF00CF
+ 00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF
+ 00FF00CF00FF00CF00FF00C200FF000000FF00000000010101FF00AFAFFF00FF
+ FFFF00FFFFFF00FFFFFF00FFFFFF0E8B8DFF1B171AFF0E8B8DFF00FFFFFF00FF
+ FFFF00FFFFFF00FFFFFF00EFEFFF000000FF00000000000000FF0D00AEFF1300
+ FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300
+ FDFF1300FDFF1300FDFF1200EDFF000000FF00000000000000FF12BFEDFF13CC
+ FDFF13CCFDFF029C20FF07AA5FFF06A64FFF009500FF0AB17FFF07AA5FFF029C
+ 20FF13CCFDFF13CCFDFF13CCFDFF000000FF00000000000000FF00C200FF00CF
+ 00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF
+ 00FF00CF00FF00CF00FF00CF00FF000000FF00000000000000FF00EFEFFF00FF
+ FFFF00FFFFFF00FFFFFF00FFFFFF0E8B8DFF1B171AFF0E8B8DFF00FFFFFF00FF
+ FFFF00FFFFFF00FFFFFF00FFFFFF000000FF00000000000000FF1200EDFF1300
+ FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300
+ FDFF1300FDFF1300FDFF1300FDFF000000FF00000000000000FF13CCFDFF13CC
+ FDFF13CCFDFF11C5DDFF12C9EDFF0CB79EFF009500FF0CB79EFF12C9EDFF11C5
+ DDFF13CCFDFF13CCFDFF12BFEDFF000000FF00000000000000FF00CF00FF00CF
+ 00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF
+ 00FF00CF00FF00CF00FF00C200FF000000FF00000000000000FF00FFFFFF00FF
+ FFFF00FFFFFF00FFFFFF00FFFFFF0E8B8DFF1B171AFF0E8B8DFF00FFFFFF00FF
+ FFFF00FFFFFF00FFFFFF00EFEFFF000000FF00000000000000FF1300FDFF1300
+ FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300
+ FDFF1300FDFF1300FDFF1200EDFF000000FF00000000000000FF11B3DDFF13CC
+ FDFF13CCFDFF13CCFDFF13CCFDFF11C5DDFF05A33FFF0FC2CEFF13CCFDFF11B3
+ DDFF0E99BEFF0D8CAEFF04262FFF404040FF00000000000000FF00B500FF00CF
+ 00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00CF00FF00B5
+ 00FF009B00FF008E00FF002700FF101010FF00000000000000FF00DFDFFF00FF
+ FFFF00FFFFFF00FFFFFF00FFFFFF03E2E2FF07C5C6FF03E2E2FF00FFFFFF00DF
+ DFFF00BFBFFF00AFAFFF003030FF040404FF00000000000000FF1100DDFF1300
+ FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1300FDFF1100
+ DDFF0E00BEFF0D00AEFF04002FFF010101FF00000000505050FF04262FFF12BF
+ EDFF11B3DDFF074D5FFF010D10FF021A20FF0E99BEFF12BFEDFF0B738EFF010D
+ 10FF303030FF404040FF606060FF0000000000000000191919FF002700FF00C2
+ 00FF00B500FF004E00FF000D00FF001A00FF009B00FF00C200FF007400FF000D
+ 00FF090909FF101010FF242424FF0000000000000000080808FF003030FF00EF
+ EFFF00DFDFFF006060FF001010FF002020FF00BFBFFF00EFEFFF008F8FFF0010
+ 10FF020202FF040404FF0E0E0EFF0000000000000000030303FF04002FFF1200
+ EDFF1100DDFF07005FFF010010FF020020FF0E00BEFF1200EDFF0B008EFF0100
+ 10FF000000FF010101FF050505FF000000000000000000000000404040FF0000
+ 00FF000000FF404040FF00000000707070FF000000FF000000FF202020FF0000
+ 0000000000000000000000000000000000000000000000000000101010FF0000
+ 00FF000000FF101010FF00000000313131FF000000FF000000FF040404FF0000
+ 0000000000000000000000000000000000000000000000000000040404FF0000
+ 00FF000000FF040404FF00000000161616FF000000FF000000FF010101FF0000
+ 0000000000000000000000000000000000000000000000000000010101FF0000
+ 00FF000000FF010101FF000000000A0A0AFF000000FF000000FF000000FF0000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000424D3E000000000000003E000000
2800000040000000300000000100010000000000800100000000000000000000
000000000000000000000000FFFFFF0000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
@@ -1115,11 +1115,15 @@
C001000000000000800000000000000080000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000100000000000000010000000000008003000000000000C003000000000000
- E007000000000000F01F000000000000FC1FFC1FFFFFFC1FE007E007F007E007
- C003C003E003C00380018001C001800100010001800000010000000000000000
- 0000000000000000000000000000000000000000000000000000000000010000
- 00010001000100010001000100010001000100018003000180038003C0038003
- C007C007E007C007E00FE00FF01FE00F00000000000000000000000000000000
- 000000000000}
+ E007000000000000F01F000000000000FC3FFC3FFC3FFC3FF81FF81FF81FF81F
+ F00FF00FF00FF00FF007F007F007F007E003E003E003E003E001E001E001E001
+ C001C001C001C001C000C000C000C00080008000800080008000800080008000
+ 8000800080008000800080008000800080008000800080008001800180018001
+ C21FC21FC21FC21FFFFFFFFFFFFFFFFF}
end
+ object Timer1: TTimer
+ Interval = 3000
+ Left = 104
+ Top = 8
+ end
end
Modified: software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/Unit1.pas
===================================================================
--- software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/Unit1.pas 2009-06-02 14:34:29 UTC (rev 4723)
+++ software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/Unit1.pas 2009-06-02 14:34:50 UTC (rev 4724)
@@ -28,7 +28,7 @@
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw_EWB, EwbCore, EmbeddedWB, ShellAPI, Menus, Registry,
- ImgList, PngImageList, LibXmlParser, LibXmlComps, IEDownload;
+ ImgList, PngImageList, LibXmlParser, LibXmlComps, IEDownload, ExtCtrls, TlHelp32;
const wm_AppelMessage = wm_user + 1;
@@ -43,6 +43,7 @@
Quit1: TMenuItem;
PngImageList1: TPngImageList;
ImageList1: TImageList;
+ Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure PopupMenu1Popup(Sender: TObject);
@@ -83,7 +84,6 @@
//Form initialization.
procedure TForm1.FormCreate(Sender: TObject);
begin
-
url := 'http://127.0.0.1:270/devel/';
//Tray icon initialization.
@@ -180,8 +180,13 @@
//Tray menu 'quit' click.
procedure TForm1.Quit1Click(Sender: TObject);
+const
+ command = 'tuxhttpserver_stop';
begin
Shell_NotifyIcon(Nim_DELETE,@tray);
+ AppIcon.Free;
+ EmbeddedWB1.Free;
+ ShellExecute(0, 'open', PChar(command), nil, nil, SW_HIDE) ;
Application.Terminate;
end;
@@ -251,26 +256,32 @@
//Return true if the tuxdroidserver is started, false if not.
function TForm1.isTuxDroidServerStarted() : boolean;
var
- path : String;
- downloaded : boolean;
+ ContinueLoop: BOOL;
+ FSnapshotHandle: THandle;
+ FProcessEntry32: TProcessEntry32;
begin
- try
- downloaded := true;
- path := ExtractFileDir(Application.ExeName);
- path := path + '\response.xml';
+ FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
+ FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
+ ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
- if FileExists(path) then
- DeleteFile(path);
+ Result := False;
- downloaded := self.EmbeddedWB1.DownloadFile(url, path);
- DeleteFile(path);
+ while Integer(ContinueLoop) <> 0 do
+ begin
+ if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
+ UpperCase('PythonForTuxDroid.exe')) or (UpperCase(FProcessEntry32.szExeFile) =
+ UpperCase('PythonForTuxDroid.exe')))
+ then begin
+ Result := True;
+ end;
- Except
- ShowMessage('Error trying to retreive file.');
- end;
+ ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
- result := downloaded;
+ end;
+
+ CloseHandle(FSnapshotHandle);
+
end;
end.
|
|
From: remi <c2m...@c2...> - 2009-06-02 14:34:37
|
Author: remi
Date: 2009-06-02 16:34:29 +0200 (Tue, 02 Jun 2009)
New Revision: 4723
Modified:
software_suite_v3/smart-core/smart-server/trunk/util/SimplePlugin/SimplePlugin.py
Log:
* added throwActuation method to the SimplePlugin class
Modified: software_suite_v3/smart-core/smart-server/trunk/util/SimplePlugin/SimplePlugin.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/util/SimplePlugin/SimplePlugin.py 2009-06-02 14:33:18 UTC (rev 4722)
+++ software_suite_v3/smart-core/smart-server/trunk/util/SimplePlugin/SimplePlugin.py 2009-06-02 14:34:29 UTC (rev 4723)
@@ -361,6 +361,19 @@
self.throwNotification("check_result", resultValue)
# --------------------------------------------------------------------------
+ # Throw an actuation to the framework.
+ # --------------------------------------------------------------------------
+ def throwActuation(self, content, *args):
+ """Throw an actuation to the framework.
+ @param content: Content of the message.
+ @param args: Arguments for the message.
+ """
+ tmp = [content,]
+ for arg in args:
+ tmp.append(arg)
+ self.throwNotification("actuation", *tmp)
+
+ # --------------------------------------------------------------------------
# Throw an error message to the plugins server.
# --------------------------------------------------------------------------
def throwError(self, message, force = False):
|
|
From: remi <c2m...@c2...> - 2009-06-02 14:33:24
|
Author: remi
Date: 2009-06-02 16:33:18 +0200 (Tue, 02 Jun 2009)
New Revision: 4722
Modified:
software_suite_v3/smart-core/smart-server/trunk/resources/03_content_servers/01_resourcePluginsServer.py
Log:
* updated log level to debug
* added white spaces in the log message of actuation event
Modified: software_suite_v3/smart-core/smart-server/trunk/resources/03_content_servers/01_resourcePluginsServer.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/resources/03_content_servers/01_resourcePluginsServer.py 2009-06-02 13:24:59 UTC (rev 4721)
+++ software_suite_v3/smart-core/smart-server/trunk/resources/03_content_servers/01_resourcePluginsServer.py 2009-06-02 14:33:18 UTC (rev 4722)
@@ -48,7 +48,7 @@
# Create a logger
self.logger = SimpleLogger("plugins_server")
self.logger.resetLog()
- self.logger.setLevel(TDS_CONF_LOG_LEVEL)
+ self.logger.setLevel(LOG_LEVEL_DEBUG)
self.logger.setTarget(TDS_CONF_LOG_TARGET)
self.logger.logInfo("-----------------------------------------------")
self.logger.logInfo("Smart-core Plugins Server")
@@ -177,7 +177,7 @@
def __onPluginActuation(self, plugin, instanceParameters, *messagesList):
messageStr = ""
for message in messagesList:
- messageStr += message
+ messageStr += " " + message
self.logger.logDebug("Plugin ACTUATION [%s] (%s)" % (
plugin.getDescription().getName(), messageStr))
|
|
From: jerome <c2m...@c2...> - 2009-06-02 13:25:07
|
Author: jerome
Date: 2009-06-02 15:24:59 +0200 (Tue, 02 Jun 2009)
New Revision: 4721
Added:
software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/images/
software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/images/ico/
software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/images/ico/activity.ico
software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/images/ico/connected.ico
software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/images/ico/error.ico
software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/images/ico/offline.ico
software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/images/ico/webbrowser.ico
software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/images/png/
software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/images/png/close.png
software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/images/png/help.png
software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/images/png/hide.png
software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/images/png/mute.png
software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/images/png/show.png
software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/images/png/unmute.png
Modified:
software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/Unit1.dcu
software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/Unit1.dfm
software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/Unit1.pas
Log:
* Added browser icons.
* Getting server informations at startup.
Modified: software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/Unit1.dcu
===================================================================
(Binary files differ)
Modified: software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/Unit1.dfm
===================================================================
--- software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/Unit1.dfm 2009-06-02 09:18:05 UTC (rev 4720)
+++ software_suite_v3/software/tool/tux_droid_browser/windows/trunk/tux_droid_browser/Unit1.dfm 2009-06-02 13:24:59 UTC (rev 4721)
@@ -10,6 +10,43 @@
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
+ Icon.Data = {
+ 0000010001001010000001002000680400001600000028000000100000002000
+ 0000010020000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000005B270E505B270E805B270E805B27
+ 0E802811068F041B22EF09404FFF000000BF0000003000000000000000000000
+ 000000000000000000005B270E705B270EEF70422CFF997868FFAD9387FFAD93
+ 87FF070F11FF1ABFEDFF1CCCFDFF17A6CEFF041B22EF00000030000000000000
+ 0000000000005B270E9F65351DFFA3724AFFD8B48DFFD4AD82FFE0C3A4FF9890
+ 89FF0E667FFF1CCCFDFF1CCCFDFF1CCCFDFF19B3DDFF020E11EF000000100000
+ 00005B270E8F683315FFD3B79DFFDCBC99FFC18749FFC18749FFC18749FF1A1E
+ 19FF1ABFEDFF1CCCFDFF1CCCFDFF1CCCFDFF1CCCFDFF1599BEFF0000009F5B27
+ 0E405B270EFFAE753EFFE0C3A4FFFBF8F4FFE4CBAFFFC58F54FF79542EFF0E66
+ 7FFF1CCCFDFF1CCCFDFF1CCCFDFF1CCCFDFF1CCCFDFF1CCCFDFF05262FFF5B27
+ 0E9F814B24FFC58F54FFFBF8F4FFFFFFFFFFFFFFFFFFE0C3A4FF48331BFF17A6
+ CEFF1CCCFDFF1CCCFDFF1CCCFDFF1CCCFDFF1CCCFDFF1CCCFDFF0C596FFF5B27
+ 0EEFAE753EFFD1A577FFFFFFFFFFFFFFFFFFFFFFFFFFDCBC99FF3C2A17FF19B3
+ DDFF1CCCFDFF1CCCFDFF1CCCFDFF1CCCFDFF17A6CEFF138CAEFF041B22EF5B27
+ 0EFFC18749FFC99660FFFFFFFFFFF7F0E8FFD8B48DFFC18749FF956D42FF1329
+ 30FF09404FFF303030FF132930FF09404FFF302212FF472C16FF441D0B805B27
+ 0EFFC99660FFF7F0E8FFE8D2BBFFD1A577FFC18749FFC18749FFE0C3A4FFEFEF
+ EFFFEFEFEFFFFFFFFFFFFFFFFFFFEFEFEFFFC58F54FF8E572CFF5B270E805B27
+ 0EFFD6B695FFF7F0E8FFF0E1D2FFC18749FFC18749FFC18749FFD4AD82FFFFFF
+ FFFFF7F0E8FFFBF8F4FFFFFFFFFFFFFFFFFFF3E9DDFF814B24FF5B270E805B27
+ 0ECFB29077FFFFFFFFFFFBF8F4FFC58F54FFC18749FFC18749FFDCBC99FFFBF8
+ F4FFF3E9DDFFFFFFFFFFFFFFFFFFFBF8F4FFFFFFFFFF65351DFF5B270E405B27
+ 0E80764830FFFBF8F4FFFFFFFFFFE8D2BBFFCD9E6BFFC18749FFC58F54FFECDA
+ C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2AEA5FF5B270EDF000000005B27
+ 0E105B270EDFA98C7BFFFFFFFFFFFFFFFFFFF7F0E8FFCD9E6BFFC18749FFDCBC
+ 99FFE8D2BBFFFFFFFFFFFFFFFFFFDCCFC6FF65351DFF5B270E60000000000000
+ 00005B270E305B270EEFA98C7BFFECDAC6FFFBF8F4FFFBF8F4FFD4AD82FFC187
+ 49FFC58F54FFE0C3A4FFBD936BFF612D12FF5B270E9F00000000000000000000
+ 0000000000005B270E305B270EDF6E3919FFAE896CFFD2AE8AFFC18749FFC187
+ 49FFAE753EFF814B24FF5B270EFF5B270E8F0000000000000000000000000000
+ 000000000000000000005B270E105B270E805B270ECF5B270EFF5B270EFF5B27
+ 0EFF5B270EEF5B270E9F5B270E4000000000000000000000000000000000FC07
+ 0000F0030000C001000080000000800000000000000000000000000000000000
+ 000000000000000100000001000080030000C0030000E0070000F01F0000}
OldCreateOrder = False
OnCloseQuery = FormCloseQuery
OnCreate = FormCreate
@@ -38,19 +75,23 @@
00000000000000000100000000000000000000000000000000000000}
end
object PopupMenu1: TPopupMenu
+ Images = PngImageList1
OnPopup = PopupMenu1Popup
Left = 112
Top = 168
object ShowHide1: TMenuItem
Caption = 'Show/Hide'
+ ImageIndex = 4
OnClick = ShowHide1Click
end
object Mute1: TMenuItem
Caption = 'Mute'
+ ImageIndex = 0
OnClick = Mute1Click
end
object Help1: TMenuItem
Caption = 'Help'
+ ImageIndex = 3
OnClick = Help1Click
end
object N1: TMenuItem
@@ -58,7 +99,1027 @@
end
object Quit1: TMenuItem
Caption = 'Quit'
+ ImageIndex = 2
OnClick = Quit1Click
end
end
+ object PngImageList1: TPngImageList
+ PngImages = <
+ item
+ PngImage.Data = {
+ 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
+ 61000000097048597300000B1300000B1301009A9C1800000A4F694343505068
+ 6F746F73686F70204943432070726F66696C65000078DA9D53675453E9163DF7
+ DEF4424B8880944B6F5215082052428B801491262A2109104A8821A1D91551C1
+ 114545041BC8A088038E8E808C15512C0C8A0AD807E421A28E83A3888ACAFBE1
+ 7BA36BD6BCF7E6CDFEB5D73EE7ACF39DB3CF07C0080C9648335135800CA9421E
+ 11E083C7C4C6E1E42E40810A2470001008B3642173FD230100F87E3C3C2B22C0
+ 07BE000178D30B0800C04D9BC0301C87FF0FEA42995C01808401C07491384B08
+ 801400407A8E42A600404601809D98265300A0040060CB6362E300502D006027
+ 7FE6D300809DF8997B01005B94211501A09100201365884400683B00ACCF568A
+ 450058300014664BC43900D82D00304957664800B0B700C0CE100BB200080C00
+ 305188852900047B0060C8232378008499001446F2573CF12BAE10E72A000078
+ 99B23CB9243945815B082D710757572E1E28CE49172B14366102619A402EC279
+ 99193281340FE0F3CC0000A0911511E083F3FD78CE0EAECECE368EB60E5F2DEA
+ BF06FF226262E3FEE5CFAB70400000E1747ED1FE2C2FB31A803B06806DFEA225
+ EE04685E0BA075F78B66B20F40B500A0E9DA57F370F87E3C3C45A190B9D9D9E5
+ E4E4D84AC4425B61CA577DFE67C25FC057FD6CF97E3CFCF7F5E0BEE22481325D
+ 814704F8E0C2CCF44CA51CCF92098462DCE68F47FCB70BFFFC1DD322C44962B9
+ 582A14E35112718E449A8CF332A52289429229C525D2FF64E2DF2CFB033EDF35
+ 00B06A3E017B912DA85D6303F64B27105874C0E2F70000F2BB6FC1D428080380
+ 6883E1CF77FFEF3FFD47A02500806649927100005E44242E54CAB33FC7080000
+ 44A0812AB0411BF4C1182CC0061CC105DCC10BFC6036844224C4C24210420A64
+ 801C726029AC82422886CDB01D2A602FD4401D34C051688693700E2EC255B80E
+ 3D700FFA61089EC128BC81090441C808136121DA8801628A58238E08179985F8
+ 21C14804128B2420C9881451224B91354831528A542055481DF23D720239875C
+ 46BA913BC8003282FC86BC47319481B2513DD40CB543B9A8371A8446A20BD064
+ 74319A8F16A09BD072B41A3D8C36A1E7D0AB680FDA8F3E43C730C0E8180733C4
+ 6C302EC6C342B1382C099363CBB122AC0CABC61AB056AC03BB89F563CFB17704
+ 128145C0093604774220611E4148584C584ED848A8201C243411DA0937090384
+ 51C2272293A84BB426BA11F9C4186232318758482C23D6128F132F107B8843C4
+ 37241289433227B9900249B1A454D212D246D26E5223E92CA99B34481A2393C9
+ DA646BB20739942C202BC885E49DE4C3E433E41BE421F25B0A9D624071A4F853
+ E22852CA6A4A19E510E534E5066598324155A39A52DDA8A15411358F5A42ADA1
+ B652AF5187A81334759A39CD8316494BA5ADA295D31A681768F769AFE874BA11
+ DD951E4E97D057D2CBE947E897E803F4770C0D861583C7886728199B18071867
+ 197718AF984CA619D38B19C754303731EB98E7990F996F55582AB62A7C1591CA
+ 0A954A9526951B2A2F54A9AAA6AADEAA0B55F355CB548FA95E537DAE46553353
+ E3A909D496AB55AA9D50EB531B5367A93BA887AA67A86F543FA47E59FD890659
+ C34CC34F43A451A0B15FE3BCC6200B6319B3782C216B0DAB86758135C426B1CD
+ D97C762ABB98FD1DBB8B3DAAA9A13943334A3357B352F394663F07E39871F89C
+ 744E09E728A797F37E8ADE14EF29E2291BA6344CB931655C6BAA96979658AB48
+ AB51AB47EBBD36AEEDA79DA6BD45BB59FB810E41C74A275C2747678FCE059DE7
+ 53D953DDA70AA7164D3D3AF5AE2EAA6BA51BA1BB4477BF6EA7EE989EBE5E809E
+ 4C6FA7DE79BDE7FA1C7D2FFD54FD6DFAA7F5470C5806B30C2406DB0CCE183CC5
+ 35716F3C1D2FC7DBF151435DC34043A561956197E18491B9D13CA3D5468D460F
+ 8C69C65CE324E36DC66DC6A326062621264B4DEA4DEE9A524DB9A629A63B4C3B
+ 4CC7CDCCCDA2CDD699359B3D31D732E79BE79BD79BDFB7605A785A2CB6A8B6B8
+ 6549B2E45AA659EEB6BC6E855A3959A558555A5DB346AD9DAD25D6BBADBBA711
+ A7B94E934EAB9ED667C3B0F1B6C9B6A9B719B0E5D806DBAEB66DB67D61676217
+ 67B7C5AEC3EE93BD937DBA7D8DFD3D070D87D90EAB1D5A1D7E73B472143A563A
+ DE9ACE9CEE3F7DC5F496E92F6758CF10CFD833E3B613CB29C4699D539BD34767
+ 1767B97383F3888B894B82CB2E973E2E9B1BC6DDC8BDE44A74F5715DE17AD2F5
+ 9D9BB39BC2EDA8DBAFEE36EE69EE87DC9FCC349F299E593373D0C3C843E051E5
+ D13F0B9F95306BDFAC7E4F434F8167B5E7232F632F9157ADD7B0B7A577AAF761
+ EF173EF63E729FE33EE33C37DE32DE595FCC37C0B7C8B7CB4FC36F9E5F85DF43
+ 7F23FF64FF7AFFD100A78025016703898141815B02FBF87A7C21BF8E3F3ADB65
+ F6B2D9ED418CA0B94115418F82AD82E5C1AD2168C8EC90AD21F7E798CE91CE69
+ 0E85507EE8D6D00761E6618BC37E0C2785878557863F8E7088581AD131973577
+ D1DC4373DF44FA449644DE9B67314F39AF2D4A352A3EAA2E6A3CDA37BA34BA3F
+ C62E6659CCD5589D58496C4B1C392E2AAE366E6CBEDFFCEDF387E29DE20BE37B
+ 17982FC85D7079A1CEC2F485A716A92E122C3A96404C884E3894F041102AA816
+ 8C25F21377258E0A79C21DC267222FD136D188D8435C2A1E4EF2482A4D7A92EC
+ 91BC357924C533A52CE5B98427A990BC4C0D4CDD9B3A9E169A76206D323D3ABD
+ 31839291907142AA214D93B667EA67E66676CBAC6585B2FEC56E8BB72F1E9507
+ C96BB390AC05592D0AB642A6E8545A28D72A07B267655766BFCD89CA3996AB9E
+ 2BCDEDCCB3CADB90379CEF9FFFED12C212E192B6A5864B572D1D58E6BDAC6A39
+ B23C7179DB0AE315052B865606AC3CB88AB62A6DD54FABED5797AE7EBD267A4D
+ 6B815EC1CA82C1B5016BEB0B550AE5857DEBDCD7ED5D4F582F59DFB561FA869D
+ 1B3E15898AAE14DB1797157FD828DC78E51B876FCABF99DC94B4A9ABC4B964CF
+ 66D266E9E6DE2D9E5B0E96AA97E6970E6E0DD9DAB40DDF56B4EDF5F645DB2F97
+ CD28DBBB83B643B9A3BF3CB8BC65A7C9CECD3B3F54A454F454FA5436EED2DDB5
+ 61D7F86ED1EE1B7BBCF634ECD5DB5BBCF7FD3EC9BEDB5501554DD566D565FB49
+ FBB3F73FAE89AAE9F896FB6D5DAD4E6D71EDC703D203FD07230EB6D7B9D4D51D
+ D23D54528FD62BEB470EC71FBEFE9DEF772D0D360D558D9CC6E223704479E4E9
+ F709DFF71E0D3ADA768C7BACE107D31F761D671D2F6A429AF29A469B539AFB5B
+ 625BBA4FCC3ED1D6EADE7AFC47DB1F0F9C343C59794AF354C969DAE982D39367
+ F2CF8C9D959D7D7E2EF9DC60DBA2B67BE763CEDF6A0F6FEFBA1074E1D245FF8B
+ E73BBC3BCE5CF2B874F2B2DBE51357B8579AAF3A5F6DEA74EA3CFE93D34FC7BB
+ 9CBB9AAEB95C6BB9EE7ABDB57B66F7E91B9E37CEDDF4BD79F116FFD6D59E393D
+ DDBDF37A6FF7C5F7F5DF16DD7E7227FDCECBBBD97727EEADBC4FBC5FF440ED41
+ D943DD87D53F5BFEDCD8EFDC7F6AC077A0F3D1DC47F7068583CFFE91F58F0F43
+ 058F998FCB860D86EB9E383E3939E23F72FDE9FCA743CF64CF269E17FEA2FECB
+ AE17162F7EF8D5EBD7CED198D1A197F29793BF6D7CA5FDEAC0EB19AFDBC6C2C6
+ 1EBEC97833315EF456FBEDC177DC771DEFA3DF0F4FE47C207F28FF68F9B1F553
+ D0A7FB93199393FF040398F3FC63332DDB000001484944415478DAA5D3CD2B44
+ 5118C7F17B4B921A0B0B852CB0F0B2F1BEC042A2662259D8484AC846594A8AB2
+ 903F80120B4A9195291B912C642199B09028B1929252F68CEF53BF3B1D37AFCD
+ A94F9D3B67CEEFDEF33CF7FADEE7918F28C6501B5A3BC302F6F018FCE83B7F68
+ C022EA75FD8027CDF350A87902A33875036CD33ACA70AFF901AEB45E8176F4A3
+ 18379A272C200787A8C6358670EC7D3D1AB18A725CA0C5D78615DCA10F27CE86
+ 0264E316592845041B28C1B0059CEBEEB3987636E7621F73D8420C1318C100A6
+ EC292CE05D55EDC511E615D0843A74E3599D79C12B76B0695DB380A49E22A6AA
+ 2743E7EE903764E808E3D845CD5F029AA5485DB39A4CBA01E1238403EC08ADC8
+ D45A44454F1D215CC41E6DECC420BAD4B219855C2A2455C49FDAB8866DC451A5
+ 1B2C61D96D63DA2F928DDF5EE54AB479DFBCCAC148EB630AC6BF3FE70FC87C61
+ 8908A0FDEE0000000049454E44AE426082}
+ Name = 'PngImage0'
+ Background = clWindow
+ end
+ item
+ PngImage.Data = {
+ 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
+ 61000000097048597300000B1300000B1301009A9C1800000A4F694343505068
+ 6F746F73686F70204943432070726F66696C65000078DA9D53675453E9163DF7
+ DEF4424B8880944B6F5215082052428B801491262A2109104A8821A1D91551C1
+ 114545041BC8A088038E8E808C15512C0C8A0AD807E421A28E83A3888ACAFBE1
+ 7BA36BD6BCF7E6CDFEB5D73EE7ACF39DB3CF07C0080C9648335135800CA9421E
+ 11E083C7C4C6E1E42E40810A2470001008B3642173FD230100F87E3C3C2B22C0
+ 07BE000178D30B0800C04D9BC0301C87FF0FEA42995C01808401C07491384B08
+ 801400407A8E42A600404601809D98265300A0040060CB6362E300502D006027
+ 7FE6D300809DF8997B01005B94211501A09100201365884400683B00ACCF568A
+ 450058300014664BC43900D82D00304957664800B0B700C0CE100BB200080C00
+ 305188852900047B0060C8232378008499001446F2573CF12BAE10E72A000078
+ 99B23CB9243945815B082D710757572E1E28CE49172B14366102619A402EC279
+ 99193281340FE0F3CC0000A0911511E083F3FD78CE0EAECECE368EB60E5F2DEA
+ BF06FF226262E3FEE5CFAB70400000E1747ED1FE2C2FB31A803B06806DFEA225
+ EE04685E0BA075F78B66B20F40B500A0E9DA57F370F87E3C3C45A190B9D9D9E5
+ E4E4D84AC4425B61CA577DFE67C25FC057FD6CF97E3CFCF7F5E0BEE22481325D
+ 814704F8E0C2CCF44CA51CCF92098462DCE68F47FCB70BFFFC1DD322C44962B9
+ 582A14E35112718E449A8CF332A52289429229C525D2FF64E2DF2CFB033EDF35
+ 00B06A3E017B912DA85D6303F64B27105874C0E2F70000F2BB6FC1D428080380
+ 6883E1CF77FFEF3FFD47A02500806649927100005E44242E54CAB33FC7080000
+ 44A0812AB0411BF4C1182CC0061CC105DCC10BFC6036844224C4C24210420A64
+ 801C726029AC82422886CDB01D2A602FD4401D34C051688693700E2EC255B80E
+ 3D700FFA61089EC128BC81090441C808136121DA8801628A58238E08179985F8
+ 21C14804128B2420C9881451224B91354831528A542055481DF23D720239875C
+ 46BA913BC8003282FC86BC47319481B2513DD40CB543B9A8371A8446A20BD064
+ 74319A8F16A09BD072B41A3D8C36A1E7D0AB680FDA8F3E43C730C0E8180733C4
+ 6C302EC6C342B1382C099363CBB122AC0CABC61AB056AC03BB89F563CFB17704
+ 128145C0093604774220611E4148584C584ED848A8201C243411DA0937090384
+ 51C2272293A84BB426BA11F9C4186232318758482C23D6128F132F107B8843C4
+ 37241289433227B9900249B1A454D212D246D26E5223E92CA99B34481A2393C9
+ DA646BB20739942C202BC885E49DE4C3E433E41BE421F25B0A9D624071A4F853
+ E22852CA6A4A19E510E534E5066598324155A39A52DDA8A15411358F5A42ADA1
+ B652AF5187A81334759A39CD8316494BA5ADA295D31A681768F769AFE874BA11
+ DD951E4E97D057D2CBE947E897E803F4770C0D861583C7886728199B18071867
+ 197718AF984CA619D38B19C754303731EB98E7990F996F55582AB62A7C1591CA
+ 0A954A9526951B2A2F54A9AAA6AADEAA0B55F355CB548FA95E537DAE46553353
+ E3A909D496AB55AA9D50EB531B5367A93BA887AA67A86F543FA47E59FD890659
+ C34CC34F43A451A0B15FE3BCC6200B6319B3782C216B0DAB86758135C426B1CD
+ D97C762ABB98FD1DBB8B3DAAA9A13943334A3357B352F394663F07E39871F89C
+ 744E09E728A797F37E8ADE14EF29E2291BA6344CB931655C6BAA96979658AB48
+ AB51AB47EBBD36AEEDA79DA6BD45BB59FB810E41C74A275C2747678FCE059DE7
+ 53D953DDA70AA7164D3D3AF5AE2EAA6BA51BA1BB4477BF6EA7EE989EBE5E809E
+ 4C6FA7DE79BDE7FA1C7D2FFD54FD6DFAA7F5470C5806B30C2406DB0CCE183CC5
+ 35716F3C1D2FC7DBF151435DC34043A561956197E18491B9D13CA3D5468D460F
+ 8C69C65CE324E36DC66DC6A326062621264B4DEA4DEE9A524DB9A629A63B4C3B
+ 4CC7CDCCCDA2CDD699359B3D31D732E79BE79BD79BDFB7605A785A2CB6A8B6B8
+ 6549B2E45AA659EEB6BC6E855A3959A558555A5DB346AD9DAD25D6BBADBBA711
+ A7B94E934EAB9ED667C3B0F1B6C9B6A9B719B0E5D806DBAEB66DB67D61676217
+ 67B7C5AEC3EE93BD937DBA7D8DFD3D070D87D90EAB1D5A1D7E73B472143A563A
+ DE9ACE9CEE3F7DC5F496E92F6758CF10CFD833E3B613CB29C4699D539BD34767
+ 1767B97383F3888B894B82CB2E973E2E9B1BC6DDC8BDE44A74F5715DE17AD2F5
+ 9D9BB39BC2EDA8DBAFEE36EE69EE87DC9FCC349F299E593373D0C3C843E051E5
+ D13F0B9F95306BDFAC7E4F434F8167B5E7232F632F9157ADD7B0B7A577AAF761
+ EF173EF63E729FE33EE33C37DE32DE595FCC37C0B7C8B7CB4FC36F9E5F85DF43
+ 7F23FF64FF7AFFD100A78025016703898141815B02FBF87A7C21BF8E3F3ADB65
+ F6B2D9ED418CA0B94115418F82AD82E5C1AD2168C8EC90AD21F7E798CE91CE69
+ 0E85507EE8D6D00761E6618BC37E0C2785878557863F8E7088581AD131973577
+ D1DC4373DF44FA449644DE9B67314F39AF2D4A352A3EAA2E6A3CDA37BA34BA3F
+ C62E6659CCD5589D58496C4B1C392E2AAE366E6CBEDFFCEDF387E29DE20BE37B
+ 17982FC85D7079A1CEC2F485A716A92E122C3A96404C884E3894F041102AA816
+ 8C25F21377258E0A79C21DC267222FD136D188D8435C2A1E4EF2482A4D7A92EC
+ 91BC357924C533A52CE5B98427A990BC4C0D4CDD9B3A9E169A76206D323D3ABD
+ 31839291907142AA214D93B667EA67E66676CBAC6585B2FEC56E8BB72F1E9507
+ C96BB390AC05592D0AB642A6E8545A28D72A07B267655766BFCD89CA3996AB9E
+ 2BCDEDCCB3CADB90379CEF9FFFED12C212E192B6A5864B572D1D58E6BDAC6A39
+ B23C7179DB0AE315052B865606AC3CB88AB62A6DD54FABED5797AE7EBD267A4D
+ 6B815EC1CA82C1B5016BEB0B550AE5857DEBDCD7ED5D4F582F59DFB561FA869D
+ 1B3E15898AAE14DB1797157FD828DC78E51B876FCABF99DC94B4A9ABC4B964CF
+ 66D266E9E6DE2D9E5B0E96AA97E6970E6E0DD9DAB40DDF56B4EDF5F645DB2F97
+ CD28DBBB83B643B9A3BF3CB8BC65A7C9CECD3B3F54A454F454FA5436EED2DDB5
+ 61D7F86ED1EE1B7BBCF634ECD5DB5BBCF7FD3EC9BEDB5501554DD566D565FB49
+ FBB3F73FAE89AAE9F896FB6D5DAD4E6D71EDC703D203FD07230EB6D7B9D4D51D
+ D23D54528FD62BEB470EC71FBEFE9DEF772D0D360D558D9CC6E223704479E4E9
+ F709DFF71E0D3ADA768C7BACE107D31F761D671D2F6A429AF29A469B539AFB5B
+ 625BBA4FCC3ED1D6EADE7AFC47DB1F0F9C343C59794AF354C969DAE982D39367
+ F2CF8C9D959D7D7E2EF9DC60DBA2B67BE763CEDF6A0F6FEFBA1074E1D245FF8B
+ E73BBC3BCE5CF2B874F2B2DBE51357B8579AAF3A5F6DEA74EA3CFE93D34FC7BB
+ 9CBB9AAEB95C6BB9EE7ABDB57B66F7E91B9E37CEDDF4BD79F116FFD6D59E393D
+ DDBDF37A6FF7C5F7F5DF16DD7E7227FDCECBBBD97727EEADBC4FBC5FF440ED41
+ D943DD87D53F5BFEDCD8EFDC7F6AC077A0F3D1DC47F7068583CFFE91F58F0F43
+ 058F998FCB860D86EB9E383E3939E23F72FDE9FCA743CF64CF269E17FEA2FECB
+ AE17162F7EF8D5EBD7CED198D1A197F29793BF6D7CA5FDEAC0EB19AFDBC6C2C6
+ 1EBEC97833315EF456FBEDC177DC771DEFA3DF0F4FE47C207F28FF68F9B1F553
+ D0A7FB93199393FF040398F3FC63332DDB000001614944415478DAA5D3BB2BC5
+ 7118C7F1DF29290B8B9494DCCA657270CAE24E64302297854DF90394C931D8C9
+ E4B2101B83C2603021274C2E0BD3A14E36613BBC9F7C4E3DE7E72CF2AD57E7FB
+ FDFDCEF7F95E9EE71709B25B29FA318BA6D0BB2B2CE3182F998711F7871856D1
+ A2711229F54B50A67E0233B8F4016CD2166AF1A4FE096EF5BE1EBD9840251ED4
+ 4F5880429CA211F798C25968FBE5DA511B3651811B744434611D8F18C3456872
+ 3356D0ADC9313DAFC2B405B8D6EA8B88A3C84DB6EDEEA340476A470F86316FBB
+ B00069DDEA28F2B1E702D8C43CF55F15E04EBF3B96350BF0A55D0C287587C1EF
+ F68E3E773796952344C301A27A116E495D643A57007F04CBC8418E00CFA8C1A7
+ C65947F097B88B396523A53AE8D202D52E40DC5F62388D9318C1A0AACD820EA1
+ 181F68C5B64FA32FA43765A213E75ACDC60B5852456EA0CE1792355FCAB6DDB5
+ 20BB941B829F521E0F729472A6FDEB63CAB43F7FCEDFC43F5F89694216DD0000
+ 000049454E44AE426082}
+ Name = 'PngImage1'
+ Background = clWindow
+ end
+ item
+ PngImage.Data = {
+ 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
+ 61000000097048597300000B1300000B1301009A9C1800000A4F694343505068
+ 6F746F73686F70204943432070726F66696C65000078DA9D53675453E9163DF7
+ DEF4424B8880944B6F5215082052428B801491262A2109104A8821A1D91551C1
+ 114545041BC8A088038E8E808C15512C0C8A0AD807E421A28E83A3888ACAFBE1
+ 7BA36BD6BCF7E6CDFEB5D73EE7ACF39DB3CF07C0080C9648335135800CA9421E
+ 11E083C7C4C6E1E42E40810A2470001008B3642173FD230100F87E3C3C2B22C0
+ 07BE000178D30B0800C04D9BC0301C87FF0FEA42995C01808401C07491384B08
+ 801400407A8E42A600404601809D98265300A0040060CB6362E300502D006027
+ 7FE6D300809DF8997B01005B94211501A09100201365884400683B00ACCF568A
+ 450058300014664BC43900D82D00304957664800B0B700C0CE100BB200080C00
+ 305188852900047B0060C8232378008499001446F2573CF12BAE10E72A000078
+ 99B23CB9243945815B082D710757572E1E28CE49172B14366102619A402EC279
+ 99193281340FE0F3CC0000A0911511E083F3FD78CE0EAECECE368EB60E5F2DEA
+ BF06FF226262E3FEE5CFAB70400000E1747ED1FE2C2FB31A803B06806DFEA225
+ EE04685E0BA075F78B66B20F40B500A0E9DA57F370F87E3C3C45A190B9D9D9E5
+ E4E4D84AC4425B61CA577DFE67C25FC057FD6CF97E3CFCF7F5E0BEE22481325D
+ 814704F8E0C2CCF44CA51CCF92098462DCE68F47FCB70BFFFC1DD322C44962B9
+ 582A14E35112718E449A8CF332A52289429229C525D2FF64E2DF2CFB033EDF35
+ 00B06A3E017B912DA85D6303F64B27105874C0E2F70000F2BB6FC1D428080380
+ 6883E1CF77FFEF3FFD47A02500806649927100005E44242E54CAB33FC7080000
+ 44A0812AB0411BF4C1182CC0061CC105DCC10BFC6036844224C4C24210420A64
+ 801C726029AC82422886CDB01D2A602FD4401D34C051688693700E2EC255B80E
+ 3D700FFA61089EC128BC81090441C808136121DA8801628A58238E08179985F8
+ 21C14804128B2420C9881451224B91354831528A542055481DF23D720239875C
+ 46BA913BC8003282FC86BC47319481B2513DD40CB543B9A8371A8446A20BD064
+ 74319A8F16A09BD072B41A3D8C36A1E7D0AB680FDA8F3E43C730C0E8180733C4
+ 6C302EC6C342B1382C099363CBB122AC0CABC61AB056AC03BB89F563CFB17704
+ 128145C0093604774220611E4148584C584ED848A8201C243411DA0937090384
+ 51C2272293A84BB426BA11F9C4186232318758482C23D6128F132F107B8843C4
+ 37241289433227B9900249B1A454D212D246D26E5223E92CA99B34481A2393C9
+ DA646BB20739942C202BC885E49DE4C3E433E41BE421F25B0A9D624071A4F853
+ E22852CA6A4A19E510E534E5066598324155A39A52DDA8A15411358F5A42ADA1
+ B652AF5187A81334759A39CD8316494BA5ADA295D31A681768F769AFE874BA11
+ DD951E4E97D057D2CBE947E897E803F4770C0D861583C7886728199B18071867
+ 197718AF984CA619D38B19C754303731EB98E7990F996F55582AB62A7C1591CA
+ 0A954A9526951B2A2F54A9AAA6AADEAA0B55F355CB548FA95E537DAE46553353
+ E3A909D496AB55AA9D50EB531B5367A93BA887AA67A86F543FA47E59FD890659
+ C34CC34F43A451A0B15FE3BCC6200B6319B3782C216B0DAB86758135C426B1CD
+ D97C762ABB98FD1DBB8B3DAAA9A13943334A3357B352F394663F07E39871F89C
+ 744E09E728A797F37E8ADE14EF29E2291BA6344CB931655C6BAA96979658AB48
+ AB51AB47EBBD36AEEDA79DA6BD45BB59FB810E41C74A275C2747678FCE059DE7
+ 53D953DDA70AA7164D3D3AF5AE2EAA6BA51BA1BB4477BF6EA7EE989EBE5E809E
+ 4C6FA7DE79BDE7FA1C7D2FFD54FD6DFAA7F5470C5806B30C2406DB0CCE183CC5
+ 35716F3C1D2FC7DBF151435DC34043A561956197E18491B9D13CA3D5468D460F
+ 8C69C65CE324E36DC66DC6A326062621264B4DEA4DEE9A524DB9A629A63B4C3B
+ 4CC7CDCCCDA2CDD699359B3D31D732E79BE79BD79BDFB7605A785A2CB6A8B6B8
+ 6549B2E45AA659EEB6BC6E855A3959A558555A5DB346AD9DAD25D6BBADBBA711
+ A7B94E934EAB9ED667C3B0F1B6C9B6A9B719B0E5D806DBAEB66DB67D61676217
+ 67B7C5AEC3EE93BD937DBA7D8DFD3D070D87D90EAB1D5A1D7E73B472143A563A
+ DE9ACE9CEE3F7DC5F496E92F6758CF10CFD833E3B613CB29C4699D539BD34767
+ 1767B97383F3888B894B82CB2E973E2E9B1BC6DDC8BDE44A74F5715DE17AD2F5
+ 9D9BB39BC2EDA8DBAFEE36EE69EE87DC9FCC349F299E593373D0C3C843E051E5
+ D13F0B9F95306BDFAC7E4F434F8167B5E7232F632F9157ADD7B0B7A577AAF761
+ EF173EF63E729FE33EE33C37DE32DE595FCC37C0B7C8B7CB4FC36F9E5F85DF43
+ 7F23FF64FF7AFFD100A78025016703898141815B02FBF87A7C21BF8E3F3ADB65
+ F6B2D9ED418CA0B94115418F82AD82E5C1AD2168C8EC90AD21F7E798CE91CE69
+ 0E85507EE8D6D00761E6618BC37E0C2785878557863F8E7088581AD131973577
+ D1DC4373DF44FA449644DE9B67314F39AF2D4A352A3EAA2E6A3CDA37BA34BA3F
+ C62E6659CCD5589D58496C4B1C392E2AAE366E6CBEDFFCEDF387E29DE20BE37B
+ 17982FC85D7079A1CEC2F485A716A92E122C3A96404C884E3894F041102AA816
+ 8C25F21377258E0A79C21DC267222FD136D188D8435C2A1E4EF2482A4D7A92EC
+ 91BC357924C533A52CE5B98427A990BC4C0D4CDD9B3A9E169A76206D323D3ABD
+ 31839291907142AA214D93B667EA67E66676CBAC6585B2FEC56E8BB72F1E9507
+ C96BB390AC05592D0AB642A6E8545A28D72A07B267655766BFCD89CA3996AB9E
+ 2BCDEDCCB3CADB90379CEF9FFFED12C212E192B6A5864B572D1D58E6BDAC6A39
+ B23C7179DB0AE315052B865606AC3CB88AB62A6DD54FABED5797AE7EBD267A4D
+ 6B815EC1CA82C1B5016BEB0B550AE5857DEBDCD7ED5D4F582F59DFB561FA869D
+ 1B3E15898AAE14DB1797157FD828DC78E51B876FCABF99DC94B4A9ABC4B964CF
+ 66D266E9E6DE2D9E5B0E96AA97E6970E6E0DD9DAB40DDF56B4EDF5F645DB2F97
+ CD28DBBB83B643B9A3BF3CB8BC65A7C9CECD3B3F54A454F454FA5436EED2DDB5
+ 61D7F86ED1EE1B7BBCF634ECD5DB5BBCF7FD3EC9BEDB5501554DD566D565FB49
+ FBB3F73FAE89AAE9F896FB6D5DAD4E6D71EDC703D203FD07230EB6D7B9D4D51D
+ D23D54528FD62BEB470EC71FBEFE9DEF772D0D360D558D9CC6E223704479E4E9
+ F709DFF71E0D3ADA768C7BACE107D31F761D671D2F6A429AF29A469B539AFB5B
+ 625BBA4FCC3ED1D6EADE7AFC47DB1F0F9C343C59794AF354C969DAE982D39367
+ F2CF8C9D959D7D7E2EF9DC60DBA2B67BE763CEDF6A0F6FEFBA1074E1D245FF8B
+ E73BBC3BCE5CF2B874F2B2DBE51357B8579AAF3A5F6DEA74EA3CFE93D34FC7BB
+ 9CBB9AAEB95C6BB9EE7ABDB57B66F7E91B9E37CEDDF4BD79F116FFD6D59E393D
+ DDBDF37A6FF7C5F7F5DF16DD7E7227FDCECBBBD97727EEADBC4FBC5FF440ED41
+ D943DD87D53F5BFEDCD8EFDC7F6AC077A0F3D1DC47F7068583CFFE91F58F0F43
+ 058F998FCB860D86EB9E383E3939E23F72FDE9FCA743CF64CF269E17FEA2FECB
+ AE17162F7EF8D5EBD7CED198D1A197F29793BF6D7CA5FDEAC0EB19AFDBC6C2C6
+ 1EBEC97833315EF456FBEDC177DC771DEFA3DF0F4FE47C207F28FF68F9B1F553
+ D0A7FB93199393FF040398F3FC63332DDB0000012D4944415478DAADD33F4B42
+ 5118C7712F3598439842104EB9F4672A31A8C58682825E406581604D85635345
+ 444D2D0D65B51804456FC0218786680851AA25A94527097C074158DF03BF0B37
+ B981713BF08173EFB9E7B9E73CE73996EF67EBC30C3288B58C3DE20805BCDB2F
+ 2DC7076338415CCF7534D4EF4544FD32D650720630932E31809AFAB7A8687C08
+ D358463FDED42F9B00DDB8C3085E91C683CFBD4DE01C8378C6A4A50939549144
+ 118B08E2149DD8415E63E3B842142B26C093FEBE8F6D2CE1185DD8D5B65278C1
+ BA56BB872DB30A13A0A9AC2EE01E07D87024D28F303EB18A0B24706D4ECD04F8
+ D22A6695F580963E879023501687F8D0A9DC60F45F0278DE825B12B39AD85612
+ DD8E711E3D3843073655C2AEC7E8B990DA29E5614CFD56CA76F37499ECF6E7EB
+ FC0DAD1568895D19B8C00000000049454E44AE426082}
+ Name = 'PngImage2'
+ Background = clWindow
+ end
+ item
+ PngImage.Data = {
+ 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
+ 61000000097048597300000B1300000B1301009A9C1800000A4F694343505068
+ 6F746F73686F70204943432070726F66696C65000078DA9D53675453E9163DF7
+ DEF4424B8880944B6F5215082052428B801491262A2109104A8821A1D91551C1
+ 114545041BC8A088038E8E808C15512C0C8A0AD807E421A28E83A3888ACAFBE1
+ 7BA36BD6BCF7E6CDFEB5D73EE7ACF39DB3CF07C0080C9648335135800CA9421E
+ 11E083C7C4C6E1E42E40810A2470001008B3642173FD230100F87E3C3C2B22C0
+ 07BE000178D30B0800C04D9BC0301C87FF0FEA42995C01808401C07491384B08
+ 801400407A8E42A600404601809D98265300A0040060CB6362E300502D006027
+ 7FE6D300809DF8997B01005B94211501A09100201365884400683B00ACCF568A
+ 450058300014664BC43900D82D00304957664800B0B700C0CE100BB200080C00
+ 305188852900047B0060C8232378008499001446F2573CF12BAE10E72A000078
+ 99B23CB9243945815B082D710757572E1E28CE49172B14366102619A402EC279
+ 99193281340FE0F3CC0000A0911511E083F3FD78CE0EAECECE368EB60E5F2DEA
+ BF06FF226262E3FEE5CFAB70400000E1747ED1FE2C2FB31A803B06806DFEA225
+ EE04685E0BA075F78B66B20F40B500A0E9DA57F370F87E3C3C45A190B9D9D9E5
+ E4E4D84AC4425B61CA577DFE67C25FC057FD6CF97E3CFCF7F5E0BEE22481325D
+ 814704F8E0C2CCF44CA51CCF92098462DCE68F47FCB70BFFFC1DD322C44962B9
+ 582A14E35112718E449A8CF332A52289429229C525D2FF64E2DF2CFB033EDF35
+ 00B06A3E017B912DA85D6303F64B27105874C0E2F70000F2BB6FC1D428080380
+ 6883E1CF77FFEF3FFD47A02500806649927100005E44242E54CAB33FC7080000
+ 44A0812AB0411BF4C1182CC0061CC105DCC10BFC6036844224C4C24210420A64
+ 801C726029AC82422886CDB01D2A602FD4401D34C051688693700E2EC255B80E
+ 3D700FFA61089EC128BC81090441C808136121DA8801628A58238E08179985F8
+ 21C14804128B2420C9881451224B91354831528A542055481DF23D720239875C
+ 46BA913BC8003282FC86BC47319481B2513DD40CB543B9A8371A8446A20BD064
+ 74319A8F16A09BD072B41A3D8C36A1E7D0AB680FDA8F3E43C730C0E8180733C4
+ 6C302EC6C342B1382C099363CBB122AC0CABC61AB056AC03BB89F563CFB17704
+ 128145C0093604774220611E4148584C584ED848A8201C243411DA0937090384
+ 51C2272293A84BB426BA11F9C4186232318758482C23D6128F132F107B8843C4
+ 37241289433227B9900249B1A454D212D246D26E5223E92CA99B34481A2393C9
+ DA646BB20739942C202BC885E49DE4C3E433E41BE421F25B0A9D624071A4F853
+ E22852CA6A4A19E510E534E5066598324155A39A52DDA8A15411358F5A42ADA1
+ B652AF5187A81334759A39CD8316494BA5ADA295D31A681768F769AFE874BA11
+ DD951E4E97D057D2CBE947E897E803F4770C0D861583C7886728199B18071867
+ 197718AF984CA619D38B19C754303731EB98E7990F996F55582AB62A7C1591CA
+ 0A954A9526951B2A2F54A9AAA6AADEAA0B55F355CB548FA95E537DAE46553353
+ E3A909D496AB55AA9D50EB531B5367A93BA887AA67A86F543FA47E59FD890659
+ C34CC34F43A451A0B15FE3BCC6200B6319B3782C216B0DAB86758135C426B1CD
+ D97C762ABB98FD1DBB8B3DAAA9A13943334A3357B352F394663F07E39871F89C
+ 744E09E728A797F37E8ADE14EF29E2291BA6344CB931655C6BAA96979658AB48
+ AB51AB47EBBD36AEEDA79DA6BD45BB59FB810E41C74A275C2747678FCE059DE7
+ 53D953DDA70AA7164D3D3AF5AE2EAA6BA51BA1BB4477BF6EA7EE989EBE5E809E
+ 4C6FA7DE79BDE7FA1C7D2FFD54FD6DFAA7F5470C5806B30C2406DB0CCE183CC5
+ 35716F3C1D2FC7DBF151435DC34043A561956197E18491B9D13CA3D5468D460F
+ 8C69C65CE324E36DC66DC6A326062621264B4DEA4DEE9A524DB9A629A63B4C3B
+ 4CC7CDCCCDA2CDD699359B3D31D732E79BE79BD79BDFB7605A785A2CB6A8B6B8
+ 6549B2E45AA659EEB6BC6E855A3959A558555A5DB346AD9DAD25D6BBADBBA711
+ A7B94E934EAB9ED667C3B0F1B6C9B6A9B719B0E5D806DBAEB66DB67D61676217
+ 67B7C5AEC3EE93BD937DBA7D8DFD3D070D87D90EAB1D5A1D7E73B472143A563A
+ DE9ACE9CEE3F7DC5F496E92F6758CF10CFD833E3B613CB29C4699D539BD34767
+ 1767B97383F3888B894B82CB2E973E2E9B1BC6DDC8BDE44A74F5715DE17AD2F5
+ 9D9BB39BC2EDA8DBAFEE36EE69EE87DC9FCC349F299E593373D0C3C843E051E5
+ D13F0B9F95306BDFAC7E4F434F8167B5E7232F632F9157ADD7B0B7A577AAF761
+ EF173EF63E729FE33EE33C37DE32DE595FCC37C0B7C8B7CB4FC36F9E5F85DF43
+ 7F23FF64FF7AFFD100A78025016703898141815B02FBF87A7C21BF8E3F3ADB65
+ F6B2D9ED418CA0B94115418F82AD82E5C1AD2168C8EC90AD21F7E798CE91CE69
+ 0E85507EE8D6D00761E6618BC37E0C2785878557863F8E7088581AD131973577
+ D1DC4373DF44FA449644DE9B67314F39AF2D4A352A3EAA2E6A3CDA37BA34BA3F
+ C62E6659CCD5589D58496C4B1C392E2AAE366E6CBEDFFCEDF387E29DE20BE37B
+ 17982FC85D7079A1CEC2F485A716A92E122C3A96404C884E3894F041102AA816
+ 8C25F21377258E0A79C21DC267222FD136D188D8435C2A1E4EF2482A4D7A92EC
+ 91BC357924C533A52CE5B98427A990BC4C0D4CDD9B3A9E169A76206D323D3ABD
+ 31839291907142AA214D93B667EA67E66676CBAC6585B2FEC56E8BB72F1E9507
+ C96BB390AC05592D0AB642A6E8545A28D72A07B267655766BFCD89CA3996AB9E
+ 2BCDEDCCB3CADB90379CEF9FFFED12C212E192B6A5864B572D1D58E6BDAC6A39
+ B23C7179DB0AE315052B865606AC3CB88AB62A6DD54FABED5797AE7EBD267A4D
+ 6B815EC1CA82C1B5016BEB0B550AE5857DEBDCD7ED5D4F582F59DFB561FA869D
+ 1B3E15898AAE14DB1797157FD828DC78E51B876FCABF99DC94B4A9ABC4B964CF
+ 66D266E9E6DE2D9E5B0E96AA97E6970E6E0DD9DAB40DDF56B4EDF5F645DB2F97
+ CD28DBBB83B643B9A3BF3CB8BC65A7C9CECD3B3F54A454F454FA5436EED2DDB5
+ 61D7F86ED1EE1B7BBCF634ECD5DB5BBCF7FD3EC9BEDB5501554DD566D565FB49
+ FBB3F73FAE89AAE9F896FB6D5DAD4E6D71EDC703D203FD07230EB6D7B9D4D51D
+ D23D54528FD62BEB470EC71FBEFE9DEF772D0D360D558D9CC6E223704479E4E9
+ F709DFF71E0D3ADA768C7BACE107D31F761D671D2F6A429AF29A469B539AFB5B
+ 625BBA4FCC3ED1D6EADE7AFC47DB1F0F9C343C59794AF354C969DAE982D39367
+ F2CF8C9D959D7D7E2EF9DC60DBA2B67BE763CEDF6A0F6FEFBA1074E1D245FF8B
+ E73BBC3BCE5CF2B874F2B2DBE51357B8579AAF3A5F6DEA74EA3CFE93D34FC7BB
+ 9CBB9AAEB95C6BB9EE7ABDB57B66F7E91B9E37CEDDF4BD79F116FFD6D59E393D
+ DDBDF37A6FF7C5F7F5DF16DD7E7227FDCECBBBD97727EEADBC4FBC5FF440ED41
+ D943DD87D53F5BFEDCD8EFDC7F6AC077A0F3D1DC47F7068583CFFE91F58F0F43
+ 058F998FCB860D86EB9E383E3939E23F72FDE9FCA743CF64CF269E17FEA2FECB
+ AE17162F7EF8D5EBD7CED198D1A197F29793BF6D7CA5FDEAC0EB19AFDBC6C2C6
+ 1EBEC97833315EF456FBEDC177DC771DEFA3DF0F4FE47C207F28FF68F9B1F553
+ D0A7FB93199393FF040398F3FC63332DDB0000014A4944415478DAA5D34F2B05
+ 5118C7F1396F40B250B2B96C4816972836FE64C1929D64839D12365614B127CA
+ 8E28B2BCEE8E85900572C34A6CB091F2228CEF73FB4D9D99EE8CE4D4A7CECC99
+ F39CF33CE78C0BE2AD0E8398417B62EC1E5B38C567F4D2791F74621B1D7AFEC0
+ 97FAB5A857BF8469DCF9016CD2019AF0A6FE9982B4A206398CA3012FEA972C40
+ 152E91C73326718D6114BC1D3E62019B68D673AFD3841DBC620CB7611806CE39
+ 5BB10FEF58D702F3B8C1211A3165011E34B886259B5CCECDF9E529079853800D
+ AC62D176615F7DABAAA3B8AA10A05A75B1D6A61DF5E0C84ECDBE0AB58B21AB7A
+ 850005D563027BDEA99C58C0DF02E4B4FA05FABD946201B252C82BFF7D6FF520
+ 994256112DFF5914756C518B1531ED180355DE76708C114DEE4A1E63DA450A74
+ 0FCEB18C157463377991B2AEF293C65B30907695A3F6AF9F296A7FFE9D7F0066
+ BC7789C4D12EF10000000049454E44AE426082}
+ Name = 'PngImage3'
+ Background = clWindow
+ end
+ item
+ PngImage.Data = {
+ 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
+ 61000000097048597300000B1300000B1301009A9C1800000A4F694343505068
+ 6F746F73686F70204943432070726F66696C65000078DA9D53675453E9163DF7
+ DEF4424B8880944B6F5215082052428B801491262A2109104A8821A1D91551C1
+ 114545041BC8A088038E8E808C15512C0C8A0AD807E421A28E83A3888ACAFBE1
+ 7BA36BD6BCF7E6CDFEB5D73EE7ACF39DB3CF07C0080C9648335135800CA9421E
+ 11E083C7C4C6E1E42E40810A2470001008B3642173FD230100F87E3C3C2B22C0
+ 07BE000178D30B0800C04D9BC0301C87FF0FEA42995C01808401C07491384B08
+ 801400407A8E42A600404601809D98265300A0040060CB6362E300502D006027
+ 7FE6D300809DF8997B01005B94211501A09100201365884400683B00ACCF568A
+ 450058300014664BC43900D82D00304957664800B0B700C0CE100BB200080C00
+ 305188852900047B0060C8232378008499001446F2573CF12BAE10E72A000078
+ 99B23CB9243945815B082D710757572E1E28CE49172B14366102619A402EC279
+ 99193281340FE0F3CC0000A0911511E083F3FD78CE0EAECECE368EB60E5F2DEA
+ BF06FF226262E3FEE5CFAB70400000E1747ED1FE2C2FB31A803B06806DFEA225
+ EE04685E0BA075F78B66B20F40B500A0E9DA57F370F87E3C3C45A190B9D9D9E5
+ E4E4D84AC4425B61CA577DFE67C25FC057FD6CF97E3CFCF7F5E0BEE22481325D
+ 814704F8E0C2CCF44CA51CCF92098462DCE68F47FCB70BFFFC1DD322C44962B9
+ 582A14E35112718E449A8CF332A52289429229C525D2FF64E2DF2CFB033EDF35
+ 00B06A3E017B912DA85D6303F64B27105874C0E2F70000F2BB6FC1D428080380
+ 6883E1CF77FFEF3FFD47A02500806649927100005E44242E54CAB33FC7080000
+ 44A0812AB0411BF4C1182CC0061CC105DCC10BFC6036844224C4C24210420A64
+ 801C726029AC82422886CDB01D2A602FD4401D34C051688693700E2EC255B80E
+ 3D700FFA61089EC128BC81090441C808136121DA8801628A58238E08179985F8
+ 21C14804128B2420C9881451224B91354831528A542055481DF23D720239875C
+ 46BA913BC8003282FC86BC47319481B2513DD40CB543B9A8371A8446A20BD064
+ 74319A8F16A09BD072B41A3D8C36A1E7D0AB680FDA8F3E43C730C0E8180733C4
+ 6C302EC6C342B1382C099363CBB122AC0CABC61AB056AC03BB89F563CFB17704
+ 128145C0093604774220611E4148584C584ED848A8201C243411DA0937090384
+ 51C2272293A84BB426BA11F9C4186232318758482C23D6128F132F107B8843C4
+ 37241289433227B9900249B1A454D212D246D26E5223E92CA99B34481A2393C9
+ DA646BB20739942C202BC885E49DE4C3E433E41BE421F25B0A9D624071A4F853
+ E22852CA6A4A19E510E534E5066598324155A39A52DDA8A15411358F5A42ADA1
+ B652AF5187A81334759A39CD8316494BA5ADA295D31A681768F769AFE874BA11
+ DD951E4E97D057D2CBE947E897E803F4770C0D861583C7886728199B18071867
+ 197718AF984CA619D38B19C754303731EB98E7990F996F55582AB62A7C1591CA
+ 0A954A9526951B2A2F54A9AAA6AADEAA0B55F355CB548FA95E537DAE46553353
+ E3A909D496AB55AA9D50EB531B5367A93BA887AA67A86F543FA47E59FD890659
+ C34CC34F43A451A0B15FE3BCC6200B6319B3782C216B0DAB86758135C426B1CD
+ D97C762ABB98FD1DBB8B3DAAA9A13943334A3357B352F394663F07E39871F89C
+ 744E09E728A797F37E8ADE14EF29E2291BA6344CB931655C6BAA96979658AB48
+ AB51AB47EBBD36AEEDA79DA6BD45BB59FB810E41C74A275C2747678FCE059DE7
+ 53D953DDA70AA7164D3D3AF5AE2EAA6BA51BA1BB4477BF6EA7EE989EBE5E809E
+ 4C6FA7DE79BDE7FA1C7D2FFD54FD6DFAA7F5470C5806B30C2406DB0CCE183CC5
+ 35716F3C1D2FC7DBF151435DC34043A561956197E18491B9D13CA3D5468D460F
+ 8C69C65CE324E36DC66DC6A326062621264B4DEA4DEE9A524DB9A629A63B4C3B
+ 4CC7CDCCCDA2CDD699359B3D31D732E79BE79BD79BDFB7605A785A2CB6A8B6B8
+ 6549B2E45AA659EEB6BC6E855A3959A558555A5DB346AD9DAD25D6BBADBBA711
+ A7B94E934EAB9ED667C3B0F1B6C9B6A9B719B0E5D806DBAEB66DB67D61676217
+ 67B7C5AEC3EE93BD937DBA7D8DFD3D070D87D90EAB1D5A1D7E73B472143A563A
+ DE9ACE9CEE3F7DC5F496E92F6758CF10CFD833E3B613CB29C4699D539BD34767
+ 1767B97383F3888B894B82CB2E973E2E9B1BC6DDC8BDE44A74F5715DE17AD2F5
+ 9D9BB39BC2EDA8DBAFEE36EE69EE87DC9FCC349F299E593373D0C3C843E051E5
+ D13F0B9F95306BDFAC7E4F434F8167B5E7232F632F9157ADD7B0B7A577AAF761
+ EF173EF63E729FE33EE33C37DE32DE595FCC37C0B7C8B7CB4FC36F9E5F85DF43
+ 7F23FF64FF7AFFD100A78025016703898141815B02FBF87A7C21BF8E3F3ADB65
+ F6B2D9ED418CA0B94115418F82AD82E5C1AD2168C8EC90AD21F7E798CE91CE69
+ 0E85507EE8D6D00761E6618BC37E0C2785878557863F8E7088581AD131973577
+ D1DC4373DF44FA449644DE9B67314F39AF2D4A352A3EAA2E6A3CDA37BA34BA3F
+ C62E6659CCD5589D58496C4B1C392E2AAE366E6CBEDFFCEDF387E29DE20BE37B
+ 17982FC85D7079A1CEC2F485A716A92E122C3A96404C884E3894F041102AA816
+ 8C25F21377258E0A79C21DC267222FD136D188D8435C2A1E4EF2482A4D7A92EC
+ 91BC357924C533A52CE5B98427A990BC4C0D4CDD9B3A9E169A76206D323D3ABD
+ 31839291907142AA214D93B667EA67E66676CBAC6585B2FEC56E8BB72F1E9507
+ C96BB390AC05592D0AB642A6E8545A28D72A07B267655766BFCD89CA3996AB9E
+ 2BCDEDCCB3CADB90379CEF9FFFED12C212E192B6A5864B572D1D58E6BDAC6A39
+ B23C7179DB0AE315052B865606AC3CB88AB62A6DD54FABED5797AE7EBD267A4D
+ 6B815EC1CA82C1B5016BEB0B550AE5857DEBDCD7ED5D4F582F59DFB561FA869D
+ 1B3E15898AAE14DB1797157FD828DC78E51B876FCABF99DC94B4A9ABC4B964CF
+ 66D266E9E6DE2D9E5B0E96AA97E6970E6E0DD9DAB40DDF56B4EDF5F645DB2F97
+ CD28DBBB83B643B9A3BF3CB8BC65A7C9CECD3B3F54A454F454FA5436EED2DDB5
+ 61D7F86ED1EE1B7BBCF634ECD5DB5BBCF7FD3EC9BEDB5501554DD566D565FB49
+ FBB3F73FAE89AAE9F896FB6D5DAD4E6D71EDC703D203FD07230EB6D7B9D4D51D
+ D23D54528FD62BEB470EC71FBEFE9DEF772D0D360D558D9CC6E223704479E4E9
+ F709DFF71E0D3ADA768C7BACE107D31F761D671D2F6A429AF29A469B539AFB5B
+ 625BBA4FCC3ED1D6EADE7AFC47DB1F0F9C343C59794AF354C969DAE982D39367
+ F2CF8C9D959D7D7E2EF9DC60DBA2B67BE763CEDF6A0F6FEFBA1074E1D245FF8B
+ E73BBC3BCE5CF2B874F2B2DBE51357B8579AAF3A5F6DEA74EA3CFE93D34FC7BB
+ 9CBB9AAEB95C6BB9EE7ABDB57B66F7E91B9E37CEDDF4BD79F116FFD6D59E393D
+ DDBDF37A6FF7C5F7F5DF16DD7E7227FDCECBBBD97727EEADBC4FBC5FF440ED41
+ D943DD87D53F5BFEDCD8EFDC7F6AC077A0F3D1DC47F7068583CFFE91F58F0F43
+ 058F998FCB860D86EB9E383E3939E23F72FDE9FCA743CF64CF269E17FEA2FECB
+ AE17162F7EF8D5EBD7CED198D1A197F29793BF6D7CA5FDEAC0EB19AFDBC6C2C6
+ 1EBEC97833315EF456FBEDC177DC771DEFA3DF0F4FE47C207F28FF68F9B1F553
+ D0A7FB93199393FF040398F3FC63332DDB000001564944415478DAA5D3BF2BC5
+ 5118C7F1FBCD4C31D0CD2077712F0B224C0AA5FC05888552C8603008835C6562
+ 20941844F207DCC16030296E18E4C7C2243F1783D18FF7A9CFA9C7C98FE4A957
+ F7DCFB3DCF73CF8FE71BC53E471CAD184275F0EC08F3D8C1ADFF3132136AB188
+ 1A7DBFC183C68528D6388B011CDA022E690365B8D67817677A9E420BBA508A4B
+ 8DB3AE401EF650890BF4603FF675BC6B4E1227688C94B08A2B74E200BD68428E
+ 125FD1610AB9B90937CF1538D6BFA7B18C15DC611B754A980C0E7A10E36E15AE
+ C09B4EB51F235857910CDA822DF46995735872C522EDCBADE21CCF3AE10A9C06
+ C929EDDFDD54BE0EBCCA1698C630BA718F1793FC84125DE7166631EA0BF82DB4
+ A30063EA091F1925E46ADF337854A1787888135A918F057D16E946D29A3F650F
+ D15E63C224DB2EB5518F4D7B8D6123257F486EC05AD8482E7E6BE57234C7BE69
+ 651FFF7A997CFCF975FE0095C45E89ACA7EBC10000000049454E44AE426082}
+ Name = 'PngImage4'
+ Background = clWindow
+ end
+ item
+ PngImage.Data = {
+ 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
+ 61000000097048597300000B1300000B1301009A9C1800000A4F694343505068
+ 6F746F73686F70204943432070726F66696C65000078DA9D53675453E9163DF7
+ DEF4424B8880944B6F5215082052428B801491262A2109104A8821A1D91551C1
+ 114545041BC8A088038E8E808C15512C0C8A0AD807E421A28E83A3888ACAFBE1
+ 7BA36BD6BCF7E6CDFEB5D73EE7ACF39DB3CF07C0080C9648335135800CA9421E
+ 11E083C7C4C6E1E42E40810A2470001008B3642173FD230100F87E3C3C2B22C0
+ 07BE000178D30B0800C04D9BC0301C87FF0FEA42995C01808401C07491384B08
+ 801400407A8E42A600404601809D98265300A0040060CB6362E300502D006027
+ 7FE6D300809DF8997B01005B94211501A09100201365884400683B00ACCF568A
+ 450058300014664BC43900D82D00304957664800B0B700C0CE100BB200080C00
+ 305188852900047B0060C8232378008499001446F2573CF12BAE10E72A000078
+ 99B23CB9243945815B082D710757572E1E28CE49172B14366102619A402EC279
+ 99193281340FE0F3CC0000A0911511E083F3FD78CE0EAECECE368EB60E5F2DEA
+ BF06FF226262E3FEE5CFAB70400000E1747ED1FE2C2FB31A803B06806DFEA225
+ EE04685E0BA075F78B66B20F40B500A0E9DA57F370F87E3C3C45A190B9D9D9E5
+ E4E4D84AC4425B61CA577DFE67C25FC057FD6CF97E3CFCF7F5E0BEE22481325D
+ 814704F8E0C2CCF44CA51CCF92098462DCE68F47FCB70BFFFC1DD322C44962B9
+ 582A14E35112718E449A8CF332A52289429229C525D2FF64E2DF2CFB033EDF35
+ 00B06A3E017B912DA85D6303F64B27105874C0E2F70000F2BB6FC1D428080380
+ 6883E1CF77FFEF3FFD47A02500806649927100005E44242E54CAB33FC7080000
+ 44A0812AB0411BF4C1182CC0061CC105DCC10BFC6036844224C4C24210420A64
+ 801C726029AC82422886CDB01D2A602FD4401D34C051688693700E2EC255B80E
+ 3D700FFA61089EC128BC81090441C808136121DA8801628A58238E08179985F8
+ 21C14804128B2420C9881451224B91354831528A542055481DF23D720239875C
+ 46BA913BC8003282FC86BC47319481B2513DD40CB543B9A8371A8446A20BD064
+ 74319A8F16A09BD072B41A3D8C36A1E7D0AB680FDA8F3E43C730C0E8180733C4
+ 6C302EC6C342B1382C099363CBB122AC0CABC61AB056AC03BB89F563CFB17704
+ 128145C0093604774220611E4148584C584ED848A8201C243411DA0937090384
+ 51C2272293A84BB426BA11F9C4186232318758482C23D6128F132F107B8843C4
+ 37241289433227B9900249B1A454D212D246D26E5223E92CA99B34481A2393C9
+ DA646BB20739942C202BC885E49DE4C3E433E41BE421F25B0A9D624071A4F853
+ E22852CA6A4A19E510E534E5066598324155A39A52DDA8A15411358F5A42ADA1
+ B652AF5187A81334759A39CD8316494BA5ADA295D31A681768F769AFE874BA11
+ DD951E4E97D057D2CBE947E897E803F4770C0D861583C7886728199B18071867
+ 197718AF984CA619D38B19C754303731EB98E7990F996F55582AB62A7C1591CA
+ 0A954A9526951B2A2F54A9AAA6AADEAA0B55F355CB548FA95E537DAE46553353
+ E3A909D496AB55AA9D50EB531B5367A93BA887AA67A86F543FA47E59FD890659
+ C34CC34F43A451A0B15FE3BCC6200B6319B3782C216B0DAB86758135C426B1CD
+ D97C762ABB98FD1DBB8B3DAAA9A13943334A3357B352F394663F07E39871F89C
+ 744E09E728A797F37E8ADE14EF29E2291BA6344CB931655C6BAA96979658AB48
+ AB51AB47EBBD36AEEDA79DA6BD45BB59FB810E41C74A275C2747678FCE059DE7
+ 53D953DDA70AA7164D3D3AF5AE2EAA6BA51BA1BB4477BF6EA7EE989EBE5E809E
+ 4C6FA7DE79BDE7FA1C7D2FFD54FD6DFAA7F5470C5806B30C2406DB0CCE183CC5
+ 35716F3C1D2FC7DBF151435DC34043A561956197E18491B9D13CA3D5468D460F
+ 8C69C65CE324E36DC66DC6A326062621264B4DEA4DEE9A524DB9A629A63B4C3B
+ 4CC7CDCCCDA2CDD699359B3D31D732E79BE79BD79BDFB7605A785A2CB6A8B6B8
+ 6549B2E45AA659EEB6BC6E855A3959A558555A5DB346AD9DAD25D6BBADBBA711
+ A7B94E934EAB9ED667C3B0F1B6C9B6A9B719B0E5D806DBAEB66DB67D61676217
+ 67B7C5AEC3EE93BD937DBA7D8DFD3D070D87D90EAB1D5A1D7E73B472143A563A
+ DE9ACE9CEE3F7DC5F496E92F6758CF10CFD833E3B613CB29C4699D539BD34767
+ 1767B97383F3888B894B82CB2E973E2E9B1BC6DDC8BDE44A74F5715DE17AD2F5
+ 9D9BB39BC2EDA8DBAFEE36EE69EE87DC9FCC349F299E593373D0C3C843E051E5
+ D13F0B9F95306BDFAC7E4F434F8167B5E7232F632F9157ADD7B0B7A577AAF761
+ EF173EF63E729FE33EE33C37DE32DE595FCC37C0B7C8B7CB4FC36F9E5F85DF43
+ 7F23FF64FF7AFFD100A78025016703898141815B02FBF87A7C21BF8E3F3ADB65
+ F6B2D9ED418CA0B94115418F82AD82E5C1AD2168C8EC90AD21F7E798CE91CE69
+ 0E85507EE8D6D00761E6618BC37E0C2785878557863F8E7088581AD131973577
+ D1DC4373DF44FA449644DE9B67314F39AF2D4A352A3EAA2E6A3CDA37BA34BA3F
+ C62E6659CCD5589D58496C4B1C392E2AAE366E6CBEDFFCEDF387E29DE20BE37B
+ 17982FC85D7079A1CEC2F485A716A92E122C3A96404C884E3894F041102AA816
+ 8C25F21377258E0A79C21DC267222FD136D188D8435C2A1E4EF2482A4D7A92EC
+ 91BC357924C533A52CE5B98427A990BC4C0D4CDD9B3A9E169A76206D323D3ABD
+ 31839291907142AA214D93B667EA67E66676CBAC6585B2FEC56E8BB72F1E9507
+ C96BB390AC05592D0AB642A6E8545A28D72A07B267655766BFCD89CA3996AB9E
+ 2BCDEDCCB3CADB90379CEF9FFFED12C212E192B6A5864B572D1D58E6BDAC6A39
+ B23C7179DB0AE315052B865606AC3CB88AB62A6DD54FABED5797AE7EBD267A4D
+ 6B815EC1CA82C1B5016BEB0B550AE5857DEBDCD7ED5D4F582F59DFB561FA869D
+ 1B3E15898AAE14DB1797157FD828DC78E51B876FCABF99DC94B4A9ABC4B964CF
+ 66D266E9E6DE2D9E5B0E96AA97E6970E6E0DD9DAB40DDF56B4EDF5F645DB2F97
+ CD28DBBB83B643B9A3BF3CB8BC65A7C9CECD3B3F54A454F454FA5436EED2DDB5
+ 61D7F86ED1EE1B7BBCF634ECD5DB5BBCF7FD3EC9BEDB5501554DD566D565FB49
+ FBB3F73FAE89AAE9F896FB6D5DAD4E6D71EDC703D203FD07230EB6D7B9D4D51D
+ D23D54528FD62BEB470EC71FBEFE9DEF772D0D360D558D9CC6E223704479E4E9
+ F709DFF71E0D3ADA768C7BACE107D31F761D671D2F6A429AF29A469B539AFB5B
+ 625BBA4FCC3ED1D6EADE7AFC47DB1F0F9C343C59794AF354C969DAE982D39367
+ F2CF8C9D959D7D7E2EF9DC60DBA2B67BE763CEDF6A0F6FEFBA1074E1D245FF8B
+ E73BBC3BCE5CF2B874F2B2DBE51357B8579AAF3A5F6DEA74EA3CFE93D34FC7BB
+ 9CBB9AAEB95C6BB9EE7ABDB57B66F7E91B9E37CEDDF4BD79F116FFD6D59E393D
+ DDBDF37A6FF7C5F7F5DF16DD7E7227FDCECBBBD97727EEADBC4FBC5FF440ED41
+ D943DD87D53F5BFEDCD8EFDC7F6AC077A0F3D1DC47F7068583CFFE91F58F0F43
+ 058F998FCB860D86EB9E383E3939E23F72FDE9FCA743CF64CF269E17FEA2FECB
+ AE17162F7EF8D5EBD7CED198D1A197F29793BF6D7CA5FDEAC0EB19AFDBC6C2C6
+ 1EBEC97833315EF456FBEDC177DC771DEFA3DF0F4FE47C207F28FF68F9B1F553
+ D0A7FB93199393FF040398F3FC63332DDB0000015B4944415478DAA5D3CD2B44
+ 511CC671376B8A449385D8302CBC44582994E20F20B1F1B240169485BC6C0C59
+ B15028B110C91F405950561A262CE465431662B061CFF5FDE9B975DD46D19CFA
+ D4B973CF79E69CDF39D749F9D94268C2202A02EF4EB1803D3C7A3F3ABE015558
+ 44A59E1FF0AC7E3672D58FA11F27FE009BB48142DCA9BF8F4BBD0FA3111DC8C7
+ 8DFA310B48C721CA708D2E1CA5246EB5584311CE51E768C22A6ED18E6374A31E
+ A99AF881038DABC6260A6C9C059CE9DF2358C60A9EB0ADC1D6A268552D7A3080
+ 715B85057CAAAA7D18C1BA4276D0AC805DB4A057AB9CC7929D9A05B85AC515DE
+ 54E1125C04F61F568DECA43254F0727FC03486D08938EE91A5C9AFC8D316B630
+ 87512FC0DB421B32318619BC63580136214DFB9EC58B8242C1224EA01493AA7C
+ 5C01393A9188C64FF98B183CC6A8EBBA092F81E37CDFBB9AE031267D91FE7295
+ 8BD1F0DB55F65A521F93D7FEFD397F0116CA6789F5B7B6230000000049454E44
+ AE426082}
+ Name = 'PngImage5'
+ Background = clWindow
+ end>
+ Left = 152
+ Top = 80
+ end
+ object ImageList1: TImageList
+ Left = 208
+ Top = 160
+ Bitmap = {
+ 494C010105000900040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+ 0000000000003600000028000000400000003000000001002000000000000030
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000523F3CFF47363AFF523F3CFF281D19FF041A20FF0940
+ 4FFF353535FF0000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000572616FF70422CFF997868FFAD9387FFAD9387FF070F11FF1ABFEDFF1CCC
+ FDFF17A6CEFF0A2026FF00000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000000...
[truncated message content] |
|
From: remi <c2m...@c2...> - 2009-06-02 09:18:22
|
Author: remi
Date: 2009-06-02 11:18:05 +0200 (Tue, 02 Jun 2009)
New Revision: 4720
Modified:
software_suite_v3/smart-core/smart-server/trunk/resources/03_content_servers/01_resourcePluginsServer.py
software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/plugin/Plugin.py
Log:
* added new event type from plugins (actuation)
* handled this new event in the plugins server resource
Modified: software_suite_v3/smart-core/smart-server/trunk/resources/03_content_servers/01_resourcePluginsServer.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/resources/03_content_servers/01_resourcePluginsServer.py 2009-06-02 08:16:39 UTC (rev 4719)
+++ software_suite_v3/smart-core/smart-server/trunk/resources/03_content_servers/01_resourcePluginsServer.py 2009-06-02 09:18:05 UTC (rev 4720)
@@ -105,6 +105,7 @@
plugin.setOnPluginErrorCallback(self.__onPluginError)
plugin.setOnPluginTraceCallback(self.__onPluginTrace)
plugin.setOnPluginResultCallback(self.__onPluginResult)
+ plugin.setOnPluginActuationCallback(self.__onPluginActuation)
plugin.setOnPluginStartingCallback(self.__onPluginStarting)
plugin.setOnPluginStoppedCallback(self.__onPluginStopped)
self.logger.logDebug("Plugin deployed [%s] to [%s]" % (
@@ -173,6 +174,13 @@
self.logger.logDebug("Plugin RESULT [%s] (%s)" % (
plugin.getDescription().getName(), str(pluginResult)))
+ def __onPluginActuation(self, plugin, instanceParameters, *messagesList):
+ messageStr = ""
+ for message in messagesList:
+ messageStr += message
+ self.logger.logDebug("Plugin ACTUATION [%s] (%s)" % (
+ plugin.getDescription().getName(), messageStr))
+
def __onPluginStarting(self, plugin, instanceParameters, instanceCommand,
instanceIsDaemon):
uuid = plugin.getDescription().getUuid()
Modified: software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/plugin/Plugin.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/plugin/Plugin.py 2009-06-02 08:16:39 UTC (rev 4719)
+++ software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/plugin/Plugin.py 2009-06-02 09:18:05 UTC (rev 4720)
@@ -170,6 +170,7 @@
self.__onPluginErrorCallback = None
self.__onPluginTraceCallback = None
self.__onPluginResultCallback = None
+ self.__onPluginActuationCallback = None
self.__onPluginStartingCallback = None
self.__onPluginStoppedCallback = None
@@ -577,6 +578,18 @@
self.__onPluginResultCallback = funct
# --------------------------------------------------------------------------
+ # Set the plugin actuation event callback.
+ # --------------------------------------------------------------------------
+ def setOnPluginActuationCallback(self, funct):
+ """Set the plugin actuation event callback.
+ @param funct: Function pointer.
+ Function prototype:
+ def onPluginActuation(plugin, instanceParameters, *messagesList):
+ pass
+ """
+ self.__onPluginActuationCallback = funct
+
+ # --------------------------------------------------------------------------
# Set the plugin starting event callback.
# --------------------------------------------------------------------------
def setOnPluginStartingCallback(self, funct):
@@ -653,6 +666,10 @@
checkResult = False
self.__onPluginResultCallback(self,
self.__pluginInstanceParameters, checkResult)
+ elif messageId == "actuation":
+ if self.__onPluginActuationCallback != None:
+ self.__onPluginActuationCallback(self,
+ self.__pluginInstanceParameters, *args)
else:
if self.__onPluginNotificationCallback != None:
self.__onPluginNotificationCallback(self,
|
|
From: remi <c2m...@c2...> - 2009-06-02 08:16:52
|
Author: remi
Date: 2009-06-02 10:16:39 +0200 (Tue, 02 Jun 2009)
New Revision: 4719
Modified:
software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/gadget/Gadget.py
software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/plugin/Plugin.py
software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/plugin/interpreters/PluginInterpreter.py
software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/ugc/Ugc.py
Log:
* added method to send events to the plugins
Modified: software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/gadget/Gadget.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/gadget/Gadget.py 2009-06-01 10:27:36 UTC (rev 4718)
+++ software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/gadget/Gadget.py 2009-06-02 08:16:39 UTC (rev 4719)
@@ -503,3 +503,13 @@
"""Stop the gadget.
"""
self.__parentPlugin.stop()
+
+ # --------------------------------------------------------------------------
+ # Send event to the gadget. (Daemon mode)
+ # --------------------------------------------------------------------------
+ def sendEvent(self, eventName, eventValues = []):
+ """Send event to the gadget. (Daemon mode)
+ @eventName: Event name.
+ @eventValues: Event values list.
+ """
+ self.__parentPlugin.sendEvent(eventName, eventValues)
Modified: software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/plugin/Plugin.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/plugin/Plugin.py 2009-06-01 10:27:36 UTC (rev 4718)
+++ software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/plugin/Plugin.py 2009-06-02 08:16:39 UTC (rev 4719)
@@ -724,3 +724,16 @@
if self.__pluginInterpreter != None:
self.__pluginInterpreter.abort()
self.__interpreterMutex.release()
+
+ # --------------------------------------------------------------------------
+ # Send event to the plugin. (Daemon mode)
+ # --------------------------------------------------------------------------
+ def sendEvent(self, eventName, eventValues = []):
+ """Send event to the plugin. (Daemon mode)
+ @eventName: Event name.
+ @eventValues: Event values list.
+ """
+ self.__interpreterMutex.acquire()
+ if self.__pluginInterpreter != None:
+ self.__pluginInterpreter.sendEvent(eventName, eventValues)
+ self.__interpreterMutex.release()
Modified: software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/plugin/interpreters/PluginInterpreter.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/plugin/interpreters/PluginInterpreter.py 2009-06-01 10:27:36 UTC (rev 4718)
+++ software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/plugin/interpreters/PluginInterpreter.py 2009-06-02 08:16:39 UTC (rev 4719)
@@ -223,6 +223,25 @@
killMe()
# --------------------------------------------------------------------------
+ # Send event to the plugin. (Daemon mode)
+ # --------------------------------------------------------------------------
+ def sendEvent(self, eventName, eventValues = []):
+ """Send event to the plugin. (Daemon mode)
+ @eventName: Event name.
+ @eventValues: Event values list.
+ """
+ if not self.__getRun():
+ return
+ if not self.__daemon:
+ return
+ eventString = "EVENT:"
+ eventString += eventName
+ for value in eventValues:
+ eventString += ":" + str(value)
+ self.__process.stdin.write("%s\n" % eventString)
+ self.__process.stdin.flush()
+
+ # --------------------------------------------------------------------------
# Loop to handling the stdout messages.
# --------------------------------------------------------------------------
def __stdOutLoop(self):
Modified: software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/ugc/Ugc.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/ugc/Ugc.py 2009-06-01 10:27:36 UTC (rev 4718)
+++ software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/ugc/Ugc.py 2009-06-02 08:16:39 UTC (rev 4719)
@@ -397,3 +397,13 @@
"""Stop the Ugc.
"""
self.__parentGadget.stop()
+
+ # --------------------------------------------------------------------------
+ # Send event to the UGC. (Daemon mode)
+ # --------------------------------------------------------------------------
+ def sendEvent(self, eventName, eventValues = []):
+ """Send event to the UGC. (Daemon mode)
+ @eventName: Event name.
+ @eventValues: Event values list.
+ """
+ self.__parentGadget.sendEvent(eventName, eventValues)
|
|
From: remi <c2m...@c2...> - 2009-06-01 10:27:45
|
Author: remi
Date: 2009-06-01 12:27:36 +0200 (Mon, 01 Jun 2009)
New Revision: 4718
Removed:
software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/attitunes/
software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/gadgets/
software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/scheduler/
software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/AttituneManager.py
software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/Framework.py
software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/Scheduler.py
software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/User.py
software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/const/ConstAttitunes.py
software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/const/ConstFramework.py
software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/const/ConstScheduler.py
Modified:
software_suite_v3/smart-core/smart-api/python/trunk/installer.nsi
software_suite_v3/smart-core/smart-api/python/trunk/setup.py
software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/TuxAPI.py
software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/version.py
Log:
* removed all libraries and interfaces to gadgets framework/attitunes manager/scheduler. (Will be rewritten in the future)
* bumped to 0.4.0
Modified: software_suite_v3/smart-core/smart-api/python/trunk/installer.nsi
===================================================================
--- software_suite_v3/smart-core/smart-api/python/trunk/installer.nsi 2009-06-01 10:11:08 UTC (rev 4717)
+++ software_suite_v3/smart-core/smart-api/python/trunk/installer.nsi 2009-06-01 10:27:36 UTC (rev 4718)
@@ -4,7 +4,7 @@
; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "Smart API for python"
-!define PRODUCT_VERSION "0.3.0"
+!define PRODUCT_VERSION "0.4.0"
; Output names
!define FINAL_INSTALLER_EXE "pySmartAPIInstaller_${PRODUCT_VERSION}.exe"
Modified: software_suite_v3/smart-core/smart-api/python/trunk/setup.py
===================================================================
--- software_suite_v3/smart-core/smart-api/python/trunk/setup.py 2009-06-01 10:11:08 UTC (rev 4717)
+++ software_suite_v3/smart-core/smart-api/python/trunk/setup.py 2009-06-01 10:27:36 UTC (rev 4718)
@@ -41,10 +41,6 @@
'tuxisalive.api.base',
'tuxisalive.api.base.const',
'tuxisalive.api.base.lib',
- 'tuxisalive.api.gadgets',
- 'tuxisalive.api.attitunes',
- 'tuxisalive.api.scheduler',
- 'tuxisalive.api.scheduler.const',
'tuxisalive.api.tuxdroid',
'tuxisalive.api.tuxdroid.const',
]
@@ -53,7 +49,7 @@
# Install the package
#
setup(name = 'tuxapi',
- version = '0.3.0',
+ version = '0.4.0',
description = 'Python API for Tuxdroid',
author = 'Remi Jocaille',
author_email = 'rem...@c2...',
Modified: software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/TuxAPI.py
===================================================================
--- software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/TuxAPI.py 2009-06-01 10:11:08 UTC (rev 4717)
+++ software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/TuxAPI.py 2009-06-01 10:27:36 UTC (rev 4718)
@@ -16,9 +16,6 @@
from base.ApiBase import *
from tuxdroid.const.ConstTuxDriver import *
from tuxdroid.const.ConstTuxOsl import *
-from tuxdroid.const.ConstFramework import *
-from tuxdroid.const.ConstAttitunes import *
-from tuxdroid.const.ConstScheduler import *
from tuxdroid.MouthEyes import MouthEyes
from tuxdroid.TTS import TTS
from tuxdroid.Wav import Wav
@@ -30,13 +27,9 @@
from tuxdroid.Button import Button
from tuxdroid.Flippers import Flippers
from tuxdroid.Spinning import Spinning
-from tuxdroid.Framework import Framework
from tuxdroid.Light import Light
from tuxdroid.Battery import Battery
from tuxdroid.Charger import Charger
-from tuxdroid.AttituneManager import AttituneManager
-from tuxdroid.Scheduler import Scheduler
-from tuxdroid.User import User
# ------------------------------------------------------------------------------
# Tux Droid API.
@@ -58,8 +51,6 @@
self.getEventsHandler().insert(statusName)
for statusName in SW_NAME_OSL:
self.getEventsHandler().insert(statusName)
- for statusName in SW_NAME_FRAMEWORK:
- self.getEventsHandler().insert(statusName)
# Create the mouth object
self.mouth = MouthEyes(self, self.server, ST_NAME_MOUTH_POSITION,
ST_NAME_MOUTH_RM, "mouth")
@@ -94,43 +85,9 @@
self.battery = Battery(self, self.server)
# Create the charger object
self.charger = Charger(self, self.server)
- # Create the framework object
- self.framework = Framework(self, self.server)
- # Create the attitune manager object
- self.attitunes = AttituneManager(self, self.server)
- # Create the scheduler object
- self.scheduler = Scheduler(self, self.server)
- # Create the user object
- self.user = User(self, self.server)
- # Bind some methods
- self.__bindSomeMethods()
# Initialize the helper
Helper.__init__(self)
- def __bindSomeMethods(self):
- """Bind some methods in order to make more usefull some
- functionalities.
- """
- # Gadget framework bindings
- self.showGadgets = self.framework.getGadgetsContainer().showGadgets
- self.getGadget = self.framework.getGadgetsContainer().getGadget
- # Attitune manager bindings
- self.showAttitunes = self.attitunes.getAttitunesContainer().showAttitunes
- self.getAttitune = self.attitunes.getAttitunesContainer().getAttitune
- # Scheduler bindings
- self.showTasks = self.scheduler.getTasksContainer().showTasks
- self.getTask = self.scheduler.getTasksContainer().getTask
- # User method bind
- def userWaitLoaded():
- ret = self.framework.waitLoaded(5.0, 0.0)
- if not ret:
- return False
- ret = self.attitunes.waitLoaded(5.0, 0.0)
- if not ret:
- return False
- return self.scheduler.waitLoaded(5.0, 1.0)
- self.user.waitLoaded = userWaitLoaded
-
# --------------------------------------------------------------------------
# Get the version of this API.
# --------------------------------------------------------------------------
Deleted: software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/AttituneManager.py
===================================================================
--- software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/AttituneManager.py 2009-06-01 10:11:08 UTC (rev 4717)
+++ software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/AttituneManager.py 2009-06-01 10:27:36 UTC (rev 4718)
@@ -1,78 +0,0 @@
-# Copyright (C) 2009 C2ME Sa
-# Remi Jocaille <rem...@c2...>
-# Distributed under the terms of the GNU General Public License
-# http://www.gnu.org/copyleft/gpl.html
-
-import os
-import time
-
-from const.ConstAttitunes import *
-from tuxisalive.api.attitunes.AttitunesContainer import AttitunesContainer
-from tuxisalive.api.base.ApiBaseChildResource import ApiBaseChildResource
-
-
-# ------------------------------------------------------------------------------
-# Class to control the attitune manager.
-# ------------------------------------------------------------------------------
-class AttituneManager(ApiBaseChildResource):
- """Class to control the attitune manager.
- """
-
- # --------------------------------------------------------------------------
- # Constructor of the class.
- # --------------------------------------------------------------------------
- def __init__(self, apiBase, apiBaseServer):
- """Constructor of the class.
- @param apiBase: ApiBase parent object.
- @param apiBaseServer: ApiBaseServer object.
- """
- ApiBaseChildResource.__init__(self, apiBase, apiBaseServer)
- for statusName in SW_NAME_ATTITUNE_MANAGER:
- self._insertNewEvent(statusName)
- self.__attitunesContainer = AttitunesContainer(apiBase, apiBaseServer, {})
- self._registerEvent(ST_NAME_AM_CONTAINER_DEPLOYED, None,
- self.__updateAttitunesContainer)
-
- # --------------------------------------------------------------------------
- # Get the attitunes container.
- # --------------------------------------------------------------------------
- def getAttitunesContainer(self):
- """Get the attitunes container.
- @return: The attitunes container.
- """
- return self.__attitunesContainer
-
- # --------------------------------------------------------------------------
- # Get if the attitune manager is started or not.
- # --------------------------------------------------------------------------
- def isStarted(self):
- """Get if the attitune manager is started or not.
- @return: True or False:
- """
- ret = self._requestOne(ST_NAME_AM_RUN)
- if ret == "True":
- return True
- else:
- return False
-
- # --------------------------------------------------------------------------
- # Update attitunes list on container deloyed event.
- # --------------------------------------------------------------------------
- def __updateAttitunesContainer(self, *args):
- cmd = "attitune_manager/attitunes_infos?"
- ret, result = self._sendCommandFullResultEx(cmd)
- if ret:
- self.__attitunesContainer._update(result)
-
- # --------------------------------------------------------------------------
- # Wait that the attitunes was loaded.
- # --------------------------------------------------------------------------
- def waitLoaded(self, timeout = 10.0, absDelay = 1.0):
- """Wait that the attitunes was loaded.
- @param timeout: Maximal time to wait.
- @return: True or False.
- """
- ret = self._waitFor(ST_NAME_AM_CONTAINER_DEPLOYED, "True", timeout)
- if ret:
- time.sleep(absDelay)
- return ret
Deleted: software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/Framework.py
===================================================================
--- software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/Framework.py 2009-06-01 10:11:08 UTC (rev 4717)
+++ software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/Framework.py 2009-06-01 10:27:36 UTC (rev 4718)
@@ -1,90 +0,0 @@
-# -*- coding: latin1 -*-
-
-# Copyright (C) 2009 C2ME Sa
-# Remi Jocaille <rem...@c2...>
-# Distributed under the terms of the GNU General Public License
-# http://www.gnu.org/copyleft/gpl.html
-
-import os
-import time
-
-from const.ConstFramework import *
-from tuxisalive.api.gadgets.GadgetsContainer import GadgetsContainer
-from tuxisalive.api.base.ApiBaseChildResource import ApiBaseChildResource
-
-# ------------------------------------------------------------------------------
-# Class to control the gadgets framework.
-# ------------------------------------------------------------------------------
-class Framework(ApiBaseChildResource):
- """Class to control the gadgets framework.
- """
-
- # --------------------------------------------------------------------------
- # Constructor of the class.
- # --------------------------------------------------------------------------
- def __init__(self, apiBase, apiBaseServer):
- """Constructor of the class.
- @param apiBase: ApiBase parent object.
- @param apiBaseServer: ApiBaseServer object.
- """
- ApiBaseChildResource.__init__(self, apiBase, apiBaseServer)
- for statusName in SW_NAME_FRAMEWORK:
- self._insertNewEvent(statusName)
- self.__gadgetsContainer = GadgetsContainer(apiBase, apiBaseServer, {})
- self._registerEvent(ST_NAME_FW_CONTAINER_DEPLOYED, None,
- self.__updateGadgetsContainer)
- self._registerEvent(ST_NAME_FW_CONFIGURATIONS_LOADED, None,
- self.__updateGadgetsContainer)
-
- # --------------------------------------------------------------------------
- # Get the gadgets container.
- # --------------------------------------------------------------------------
- def getGadgetsContainer(self):
- """Get the gadgets container.
- @return: The gadgets container.
- """
- return self.__gadgetsContainer
-
- # --------------------------------------------------------------------------
- # Get if the framework is started or not.
- # --------------------------------------------------------------------------
- def isStarted(self):
- """Get if the framework is started or not.
- @return: True or False:
- """
- ret = self._requestOne(ST_NAME_FW_RUN)
- if ret == "True":
- return True
- else:
- return False
-
- # --------------------------------------------------------------------------
- # Update gadgets list on container deloyed event.
- # --------------------------------------------------------------------------
- def __updateGadgetsContainer(self, *args):
- cmd = "gadget_framework/gadgets_infos?"
- ret, result = self._sendCommandFullResultEx(cmd)
- if ret:
- gadgetsStruct = {}
- sAddress = self.getParent().server.getAddress()
- for key in result.keys():
- if key.find("data") == 0:
- result[key]['description']['icon_file'] = "%s%s" % (sAddress,
- result[key]['description']['icon_file'])
- result[key]['description']['help_file'] = "%s%s" % (sAddress,
- result[key]['description']['help_file'])
- gadgetsStruct[key] = result[key]
- self.__gadgetsContainer._update(gadgetsStruct)
-
- # --------------------------------------------------------------------------
- # Wait that the gadgets was loaded.
- # --------------------------------------------------------------------------
- def waitLoaded(self, timeout = 10.0, absDelay = 1.0):
- """Wait that the gadgets was loaded.
- @param timeout: Maximal time to wait.
- @return: True or False.
- """
- ret = self._waitFor(ST_NAME_FW_CONFIGURATIONS_LOADED, "True", timeout)
- if ret:
- time.sleep(absDelay)
- return ret
Deleted: software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/Scheduler.py
===================================================================
--- software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/Scheduler.py 2009-06-01 10:11:08 UTC (rev 4717)
+++ software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/Scheduler.py 2009-06-01 10:27:36 UTC (rev 4718)
@@ -1,78 +0,0 @@
-# Copyright (C) 2009 C2ME Sa
-# Remi Jocaille <rem...@c2...>
-# Distributed under the terms of the GNU General Public License
-# http://www.gnu.org/copyleft/gpl.html
-
-import time
-
-from const.ConstScheduler import *
-from tuxisalive.api.scheduler.TasksContainer import TasksContainer
-from tuxisalive.api.base.ApiBaseChildResource import ApiBaseChildResource
-
-# ------------------------------------------------------------------------------
-# Class to control the scheduler.
-# ------------------------------------------------------------------------------
-class Scheduler(ApiBaseChildResource):
- """Class to control the scheduler.
- """
-
- # --------------------------------------------------------------------------
- # Constructor of the class.
- # --------------------------------------------------------------------------
- def __init__(self, apiBase, apiBaseServer):
- """Constructor of the class.
- @param apiBase: ApiBase parent object.
- @param apiBaseServer: ApiBaseServer object.
- """
- ApiBaseChildResource.__init__(self, apiBase, apiBaseServer)
- for statusName in SW_NAME_SCHEDULER_MANAGER:
- self._insertNewEvent(statusName)
- self.__tasksContainer = TasksContainer(apiBase, apiBaseServer, {})
- self._registerEvent(ST_NAME_SCM_TASKS_LOADED, None,
- self.__updateTasksContainer)
- self._registerEvent(ST_NAME_SCM_TASKS_UNLOADED, None,
- self.__updateTasksContainer)
-
- # --------------------------------------------------------------------------
- # Get the tasks container.
- # --------------------------------------------------------------------------
- def getTasksContainer(self):
- """Get the tasks container.
- @return: The tasks container.
- """
- return self.__tasksContainer
-
- # --------------------------------------------------------------------------
- # Get if the scheduler is started or not.
- # --------------------------------------------------------------------------
- def isStarted(self):
- """Get if the scheduler is started or not.
- @return: True or False:
- """
- ret = self._requestOne(ST_NAME_SCM_RUN)
- if ret == "True":
- return True
- else:
- return False
-
- # --------------------------------------------------------------------------
- # Update tasks list on task added/removed events.
- # --------------------------------------------------------------------------
- def __updateTasksContainer(self, *args):
- cmd = "scheduler/tasks_infos?"
- ret, result = self._sendCommandFullResultEx(cmd)
- if ret:
- self.__tasksContainer._update(result)
-
- # --------------------------------------------------------------------------
- # Wait that the tasks was loaded.
- # --------------------------------------------------------------------------
- def waitLoaded(self, timeout = 10.0, absDelay = 1.0):
- """Wait that the tasks was loaded.
- @param timeout: Maximal time to wait.
- @return: True or False.
- """
- ret = self._waitFor(ST_NAME_SCM_TASKS_LOADED, "True", timeout)
- if ret:
- time.sleep(absDelay)
- return ret
Deleted: software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/User.py
===================================================================
--- software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/User.py 2009-06-01 10:11:08 UTC (rev 4717)
+++ software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/User.py 2009-06-01 10:27:36 UTC (rev 4718)
@@ -1,41 +0,0 @@
-# Copyright (C) 2009 C2ME Sa
-# Remi Jocaille <rem...@c2...>
-# Distributed under the terms of the GNU General Public License
-# http://www.gnu.org/copyleft/gpl.html
-
-import os
-
-from tuxisalive.api.base.ApiBaseChildResource import ApiBaseChildResource
-
-# ------------------------------------------------------------------------------
-# Class to manages the user configurations.
-# ------------------------------------------------------------------------------
-class User(ApiBaseChildResource):
- """Class to manages the user configurations.
- """
-
- # --------------------------------------------------------------------------
- # Constructor of the class.
- # --------------------------------------------------------------------------
- def __init__(self, apiBase, apiBaseServer):
- """Constructor of the class.
- @param apiBase: ApiBase parent object.
- @param apiBaseServer: ApiBaseServer object.
- """
- ApiBaseChildResource.__init__(self, apiBase, apiBaseServer)
-
- # --------------------------------------------------------------------------
- # Load the configurations from an user directory.
- # --------------------------------------------------------------------------
- def setDirectory(self, userDirectory = None):
- """Load the configurations from an user directory.
- @userDirectory: User directory.
- @return: True or False.
- """
- if userDirectory == None:
- userDirectory = os.path.join(os.path.expanduser("~"), "MyTux")
- parameters = {
- 'configuration_path' : userDirectory,
- }
- cmd = "user_configuration/set_user_directory?"
- return self._sendCommandBooleanResult(cmd, parameters)
Deleted: software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/const/ConstAttitunes.py
===================================================================
--- software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/const/ConstAttitunes.py 2009-06-01 10:11:08 UTC (rev 4717)
+++ software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/const/ConstAttitunes.py 2009-06-01 10:27:36 UTC (rev 4718)
@@ -1,18 +0,0 @@
-# Copyright (C) 2009 C2ME Sa
-# Remi Jocaille <rem...@c2...>
-# Distributed under the terms of the GNU General Public License
-# http://www.gnu.org/copyleft/gpl.html
-
-#
-# Statuses declaration
-#
-ST_NAME_AM_RUN = "attitune_manager_run"
-ST_NAME_AM_CONTAINER_DEPLOYED = "attitune_manager_container_deployed"
-ST_NAME_AM_ATTITUNE_STARTING = "attitune_manager_attitune_starting"
-ST_NAME_AM_ATTITUNE_STOPPED = "attitune_manager_attitune_stopped"
-SW_NAME_ATTITUNE_MANAGER = [
- ST_NAME_AM_RUN,
- ST_NAME_AM_CONTAINER_DEPLOYED,
- ST_NAME_AM_ATTITUNE_STARTING,
- ST_NAME_AM_ATTITUNE_STOPPED,
-]
Deleted: software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/const/ConstFramework.py
===================================================================
--- software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/const/ConstFramework.py 2009-06-01 10:11:08 UTC (rev 4717)
+++ software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/const/ConstFramework.py 2009-06-01 10:27:36 UTC (rev 4718)
@@ -1,22 +0,0 @@
-# Copyright (C) 2009 C2ME Sa
-# Remi Jocaille <rem...@c2...>
-# Distributed under the terms of the GNU General Public License
-# http://www.gnu.org/copyleft/gpl.html
-
-#
-# Statuses declaration
-#
-ST_NAME_FW_RUN = "framework_run"
-ST_NAME_FW_CONTAINER_DEPLOYED = "framework_container_deployed"
-ST_NAME_FW_GADGET_STARTING = "framework_gadget_starting"
-ST_NAME_FW_GADGET_STOPPED = "framework_gadget_stopped"
-ST_NAME_FW_CONFIGURATIONS_LOADED = "framework_configurations_loaded"
-ST_NAME_FW_CONFIGURATIONS_UNLOADED = "framework_configurations_unloaded"
-SW_NAME_FRAMEWORK = [
- ST_NAME_FW_RUN,
- ST_NAME_FW_CONTAINER_DEPLOYED,
- ST_NAME_FW_GADGET_STARTING,
- ST_NAME_FW_GADGET_STOPPED,
- ST_NAME_FW_CONFIGURATIONS_LOADED,
- ST_NAME_FW_CONFIGURATIONS_UNLOADED,
-]
Deleted: software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/const/ConstScheduler.py
===================================================================
--- software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/const/ConstScheduler.py 2009-06-01 10:11:08 UTC (rev 4717)
+++ software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/tuxdroid/const/ConstScheduler.py 2009-06-01 10:27:36 UTC (rev 4718)
@@ -1,16 +0,0 @@
-# Copyright (C) 2009 C2ME Sa
-# Remi Jocaille <rem...@c2...>
-# Distributed under the terms of the GNU General Public License
-# http://www.gnu.org/copyleft/gpl.html
-
-#
-# Scheduler manager events/statuses
-#
-ST_NAME_SCM_RUN = "scheduler_manager_run"
-ST_NAME_SCM_TASKS_LOADED = "scheduler_manager_tasks_loaded"
-ST_NAME_SCM_TASKS_UNLOADED = "scheduler_manager_tasks_unloaded"
-SW_NAME_SCHEDULER_MANAGER = [
- ST_NAME_SCM_RUN,
- ST_NAME_SCM_TASKS_LOADED,
- ST_NAME_SCM_TASKS_UNLOADED,
-]
Modified: software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/version.py
===================================================================
--- software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/version.py 2009-06-01 10:11:08 UTC (rev 4717)
+++ software_suite_v3/smart-core/smart-api/python/trunk/tuxisalive/api/version.py 2009-06-01 10:27:36 UTC (rev 4718)
@@ -7,5 +7,5 @@
author = "Remi Jocaille (rem...@c2...)"
date = "2009"
-version = '0.3.0'
+version = '0.4.0'
licence = "GPL"
|
|
From: remi <c2m...@c2...> - 2009-06-01 10:11:14
|
Author: remi
Date: 2009-06-01 12:11:08 +0200 (Mon, 01 Jun 2009)
New Revision: 4717
Modified:
software_suite_v3/smart-core/smart-api/python/trunk/installer.nsi
Log:
* added version in the compiled installer file name
* added filter on *pyc and *.svn on installer creation
Modified: software_suite_v3/smart-core/smart-api/python/trunk/installer.nsi
===================================================================
--- software_suite_v3/smart-core/smart-api/python/trunk/installer.nsi 2009-06-01 10:04:55 UTC (rev 4716)
+++ software_suite_v3/smart-core/smart-api/python/trunk/installer.nsi 2009-06-01 10:11:08 UTC (rev 4717)
@@ -7,7 +7,7 @@
!define PRODUCT_VERSION "0.3.0"
; Output names
-!define FINAL_INSTALLER_EXE "pySmartAPIInstaller.exe"
+!define FINAL_INSTALLER_EXE "pySmartAPIInstaller_${PRODUCT_VERSION}.exe"
!define UNINSTALLER_EXE "pySmartAPIUninstaller.exe"
; The name of the installer
@@ -56,7 +56,7 @@
; Write the files
CreateDirectory "$TUXDROID_PYTHON_PATH\Lib\site-packages\tuxisalive"
SetOutPath "$TUXDROID_PYTHON_PATH\Lib\site-packages\tuxisalive"
- File /r tuxisalive\*
+ File /r /x *.pyc /x *.svn tuxisalive\*
CreateDirectory "$TUXDROID_PATH\resources\images"
SetOutPath "$TUXDROID_PATH\resources\images"
|
|
From: remi <c2m...@c2...> - 2009-06-01 10:05:02
|
Author: remi
Date: 2009-06-01 12:04:55 +0200 (Mon, 01 Jun 2009)
New Revision: 4716
Modified:
software_suite_v3/smart-core/smart-server/trunk/installer.nsi
Log:
* added version in the compiled installer file name
Modified: software_suite_v3/smart-core/smart-server/trunk/installer.nsi
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/installer.nsi 2009-06-01 10:02:15 UTC (rev 4715)
+++ software_suite_v3/smart-core/smart-server/trunk/installer.nsi 2009-06-01 10:04:55 UTC (rev 4716)
@@ -7,7 +7,7 @@
!define PRODUCT_VERSION "0.4.0"
; Output names
-!define FINAL_INSTALLER_EXE "SmartServerInstaller.exe"
+!define FINAL_INSTALLER_EXE "SmartServerInstaller_${PRODUCT_VERSION}.exe"
!define UNINSTALLER_EXE "SmartServerUninstaller.exe"
; The name of the installer
|
|
From: remi <c2m...@c2...> - 2009-06-01 10:02:24
|
Author: remi
Date: 2009-06-01 12:02:15 +0200 (Mon, 01 Jun 2009)
New Revision: 4715
Modified:
software_suite_v3/smart-core/smart-server/trunk/installer.nsi
Log:
* added filter on *pyc and *.svn on installer creation
* restart server at the end of installation if requested (/DSTART)
Modified: software_suite_v3/smart-core/smart-server/trunk/installer.nsi
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/installer.nsi 2009-05-30 14:39:36 UTC (rev 4714)
+++ software_suite_v3/smart-core/smart-server/trunk/installer.nsi 2009-06-01 10:02:15 UTC (rev 4715)
@@ -70,15 +70,15 @@
CreateDirectory "$TUXDROID_PATH\softwares\smart-server\data"
SetOutPath "$TUXDROID_PATH\softwares\smart-server\data"
- File /r data\*
+ File /r /x *.pyc /x *.svn data\*
CreateDirectory "$TUXDROID_PATH\softwares\smart-server\resources"
SetOutPath "$TUXDROID_PATH\softwares\smart-server\resources"
- File /r resources\*
+ File /r /x *.pyc /x *.svn resources\*
CreateDirectory "$TUXDROID_PATH\softwares\smart-server\util"
SetOutPath "$TUXDROID_PATH\softwares\smart-server\util"
- File /r util\*
+ File /r /x *.pyc /x *.svn util\*
SetOutPath "$TUXDROID_PATH\bin"
File delphi_launchers\smart_server_start.exe
@@ -100,6 +100,16 @@
; Write the uninstall file
WriteUninstaller "$UNINSTALLERS_SUB_PATH\${UNINSTALLER_EXE}"
+
+ ; Start the server is requested
+ Push "START" ; push the search string onto the stack
+ Push "false" ; push a default value onto the stack
+ Call GetParameterValue
+ Pop $2
+ StrCmp $2 "true" start pass
+ start:
+ Exec "$TUXDROID_PATH\bin\smart_server_start.exe"
+ pass:
Return
SectionEnd
@@ -139,3 +149,188 @@
; Quit the uninstaller
Quit
SectionEnd
+
+;------------------------------------------------------------------------------
+; StrStr
+; input, top of stack = string to search for
+; top of stack-1 = string to search in
+; output, top of stack (replaces with the portion of the string remaining)
+; modifies no other variables.
+;
+; Usage:
+; Push "this is a long ass string"
+; Push "ass"
+; Call StrStr
+; Pop $0
+; ($0 at this point is "ass string")
+
+Function StrStr
+ Exch $1 ; st=haystack,old$1, $1=needle
+ Exch ; st=old$1,haystack
+ Exch $2 ; st=old$1,old$2, $2=haystack
+ Push $3
+ Push $4
+ Push $5
+ StrLen $3 $1
+ StrCpy $4 0
+ ; $1=needle
+ ; $2=haystack
+ ; $3=len(needle)
+ ; $4=cnt
+ ; $5=tmp
+ loop:
+ StrCpy $5 $2 $3 $4
+ StrCmp $5 $1 done
+ StrCmp $5 "" done
+ IntOp $4 $4 + 1
+ Goto loop
+ done:
+ StrCpy $1 $2 "" $4
+ Pop $5
+ Pop $4
+ Pop $3
+ Pop $2
+ Exch $1
+FunctionEnd
+
+;------------------------------------------------------------------------------
+; GetParameters
+; input, none
+; output, top of stack (replaces, with i.e. whatever)
+; modifies no other variables.
+
+Function GetParameters
+ Push $0
+ Push $1
+ Push $2
+ StrCpy $0 $CMDLINE 1
+ StrCpy $1 '"'
+ StrCpy $2 1
+ StrCmp $0 '"' loop
+ StrCpy $1 ' ' ; we're scanning for a space instead of a quote
+ loop:
+ StrCpy $0 $CMDLINE 1 $2
+ StrCmp $0 $1 loop2
+ StrCmp $0 "" loop2
+ IntOp $2 $2 + 1
+ Goto loop
+ loop2:
+ IntOp $2 $2 + 1
+ StrCpy $0 $CMDLINE 1 $2
+ StrCmp $0 " " loop2
+ StrCpy $0 $CMDLINE "" $2
+ Pop $2
+ Pop $1
+ Exch $0
+FunctionEnd
+
+; -----------------------------------------------------------------------------
+; GetParameterValue
+; -----------------------------------------------------------------------------
+; Chris Morgan<cm...@al...> 5/10/2004
+; -Updated 4/7/2005 to add support for retrieving a command line switch
+; and additional documentation
+;
+; Searches the command line input, retrieved using GetParameters, for the
+; value of an option given the option name. If no option is found the
+; default value is placed on the top of the stack upon function return.
+;
+; This function can also be used to detect the existence of just a
+; command line switch like /OUTPUT Pass the default and "OUTPUT"
+; on the stack like normal. An empty return string "" will indicate
+; that the switch was found, the default value indicates that
+; neither a parameter or switch was found.
+;
+; Inputs - Top of stack is default if parameter isn't found,
+; second in stack is parameter to search for, ex. "OUTPUT"
+; Outputs - Top of the stack contains the value of this parameter
+; So if the command line contained /OUTPUT=somedirectory, "somedirectory"
+; will be on the top of the stack when this function returns
+;
+; Register usage
+;$R0 - default return value if the parameter isn't found
+;$R1 - input parameter, for example OUTPUT from the above example
+;$R2 - the length of the search, this is the search parameter+2
+; as we have '/OUTPUT='
+;$R3 - the command line string
+;$R4 - result from StrStr calls
+;$R5 - search for ' ' or '"'
+Function GetParameterValue
+ Exch $R0 ; get the top of the stack(default parameter) into R0
+ Exch ; exchange the top of the stack(default) with
+ ; the second in the stack(parameter to search for)
+ Exch $R1 ; get the top of the stack(search parameter) into $R1
+
+ ;Preserve on the stack the registers used in this function
+ Push $R2
+ Push $R3
+ Push $R4
+ Push $R5
+
+ Strlen $R2 $R1+2 ; store the length of the search string into R2
+
+ Call GetParameters ; get the command line parameters
+ Pop $R3 ; store the command line string in R3
+
+ # search for quoted search string
+ StrCpy $R5 '"' ; later on we want to search for a open quote
+ Push $R3 ; push the 'search in' string onto the stack
+ Push '"/$R1=' ; push the 'search for'
+ Call StrStr ; search for the quoted parameter value
+ Pop $R4
+ StrCpy $R4 $R4 "" 1 ; skip over open quote character, "" means no maxlen
+ StrCmp $R4 "" "" next ; if we didn't find an empty string go to next
+
+ # search for non-quoted search string
+ StrCpy $R5 ' ' ; later on we want to search for a space since we
+ ; didn't start with an open quote '"' we shouldn't
+ ; look for a close quote '"'
+ Push $R3 ; push the command line back on the stack for searching
+ Push '/$R1=' ; search for the non-quoted search string
+ Call StrStr
+ Pop $R4
+
+ ; $R4 now contains the parameter string starting at the search string,
+ ; if it was found
+ next:
+ StrCmp $R4 "" check_for_switch ; if we didn't find anything then look for
+ ; usage as a command line switch
+ # copy the value after /$R1= by using StrCpy with an offset of $R2,
+ # the length of '/OUTPUT='
+ StrCpy $R0 $R4 "" $R2 ; copy commandline text beyond parameter into $R0
+ # search for the next parameter so we can trim this extra text off
+ Push $R0
+ Push $R5 ; search for either the first space ' ', or the first
+ ; quote '"'
+ ; if we found '"/output' then we want to find the
+ ; ending ", as in '"/output=somevalue"'
+ ; if we found '/output' then we want to find the first
+ ; space after '/output=somevalue'
+ Call StrStr ; search for the next parameter
+ Pop $R4
+ StrCmp $R4 "" done ; if 'somevalue' is missing, we are done
+ StrLen $R4 $R4 ; get the length of 'somevalue' so we can copy this
+ ; text into our output buffer
+ StrCpy $R0 $R0 -$R4 ; using the length of the string beyond the value,
+ ; copy only the value into $R0
+ goto done ; if we are in the parameter retrieval path skip over
+ ; the check for a command line switch
+
+ ; See if the parameter was specified as a command line switch, like '/output'
+ check_for_switch:
+ Push $R3 ; push the command line back on the stack for searching
+ Push '/$R1' ; search for the non-quoted search string
+ Call StrStr
+ Pop $R4
+ StrCmp $R4 "" done ; if we didn't find anything then use the default
+ StrCpy $R0 "" ; otherwise copy in an empty string since we found the
+ ; parameter, just didn't find a value
+
+ done:
+ Pop $R5
+ Pop $R4
+ Pop $R3
+ Pop $R2
+ Pop $R1
+ Exch $R0 ; put the value in $R0 at the top of the stack
+FunctionEnd
|
|
From: JDM <c2m...@c2...> - 2009-05-30 14:39:50
|
Author: JDM
Date: 2009-05-30 16:39:36 +0200 (Sat, 30 May 2009)
New Revision: 4714
Added:
software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/
software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo.sln
software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo.suo
software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/
software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Form1.Designer.cs
software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Form1.cs
software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Form1.resx
software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Program.cs
software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Properties/
software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Properties/AssemblyInfo.cs
software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Properties/Resources.Designer.cs
software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Properties/Resources.resx
software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Properties/Settings.Designer.cs
software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Properties/Settings.settings
software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/TuxAPI.cs
software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/TuxAPIDemo.csproj
software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/tux.ico
Removed:
software_suite_v3/smart-core/smart-api/csharp/trunk/Control Tux Droid/
Log:
* Renamed "Control Tux Droid" to "ControlTuxDroid"
Added: software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Form1.Designer.cs
===================================================================
--- software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Form1.Designer.cs (rev 0)
+++ software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Form1.Designer.cs 2009-05-30 14:39:36 UTC (rev 4714)
@@ -0,0 +1,627 @@
+namespace TuxAPIDemo
+{
+ partial class Form1
+ {
+ /// <summary>
+ /// Variable nécessaire au concepteur.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Nettoyage des ressources utilisées.
+ /// </summary>
+ /// <param name="disposing">true si les ressources managées doivent être supprimées ; sinon, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Code généré par le Concepteur Windows Form
+
+ /// <summary>
+ /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
+ /// le contenu de cette méthode avec l'éditeur de code.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
+ this.button1 = new System.Windows.Forms.Button();
+ this.button2 = new System.Windows.Forms.Button();
+ this.button3 = new System.Windows.Forms.Button();
+ this.button4 = new System.Windows.Forms.Button();
+ this.button5 = new System.Windows.Forms.Button();
+ this.button6 = new System.Windows.Forms.Button();
+ this.button7 = new System.Windows.Forms.Button();
+ this.button8 = new System.Windows.Forms.Button();
+ this.button9 = new System.Windows.Forms.Button();
+ this.button10 = new System.Windows.Forms.Button();
+ this.button11 = new System.Windows.Forms.Button();
+ this.button12 = new System.Windows.Forms.Button();
+ this.button13 = new System.Windows.Forms.Button();
+ this.button14 = new System.Windows.Forms.Button();
+ this.button15 = new System.Windows.Forms.Button();
+ this.button17 = new System.Windows.Forms.Button();
+ this.button18 = new System.Windows.Forms.Button();
+ this.button19 = new System.Windows.Forms.Button();
+ this.button20 = new System.Windows.Forms.Button();
+ this.button16 = new System.Windows.Forms.Button();
+ this.button21 = new System.Windows.Forms.Button();
+ this.button22 = new System.Windows.Forms.Button();
+ this.button23 = new System.Windows.Forms.Button();
+ this.button24 = new System.Windows.Forms.Button();
+ this.button25 = new System.Windows.Forms.Button();
+ this.button26 = new System.Windows.Forms.Button();
+ this.button27 = new System.Windows.Forms.Button();
+ this.button28 = new System.Windows.Forms.Button();
+ this.button29 = new System.Windows.Forms.Button();
+ this.button30 = new System.Windows.Forms.Button();
+ this.button31 = new System.Windows.Forms.Button();
+ this.button32 = new System.Windows.Forms.Button();
+ this.button33 = new System.Windows.Forms.Button();
+ this.button34 = new System.Windows.Forms.Button();
+ this.button35 = new System.Windows.Forms.Button();
+ this.tabControl1 = new System.Windows.Forms.TabControl();
+ this.tabPage1 = new System.Windows.Forms.TabPage();
+ this.button41 = new System.Windows.Forms.Button();
+ this.button40 = new System.Windows.Forms.Button();
+ this.button39 = new System.Windows.Forms.Button();
+ this.tabPage2 = new System.Windows.Forms.TabPage();
+ this.button38 = new System.Windows.Forms.Button();
+ this.button37 = new System.Windows.Forms.Button();
+ this.button36 = new System.Windows.Forms.Button();
+ this.tabControl1.SuspendLayout();
+ this.tabPage1.SuspendLayout();
+ this.tabPage2.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // button1
+ //
+ this.button1.Location = new System.Drawing.Point(141, 6);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(129, 23);
+ this.button1.TabIndex = 900;
+ this.button1.Text = "Close eyes";
+ this.button1.UseVisualStyleBackColor = true;
+ this.button1.Click += new System.EventHandler(this.button1_Click);
+ //
+ // button2
+ //
+ this.button2.Location = new System.Drawing.Point(6, 6);
+ this.button2.Name = "button2";
+ this.button2.Size = new System.Drawing.Size(129, 23);
+ this.button2.TabIndex = 1;
+ this.button2.Text = "Open eyes";
+ this.button2.UseVisualStyleBackColor = true;
+ this.button2.Click += new System.EventHandler(this.button2_Click);
+ //
+ // button3
+ //
+ this.button3.Location = new System.Drawing.Point(6, 122);
+ this.button3.Name = "button3";
+ this.button3.Size = new System.Drawing.Size(129, 23);
+ this.button3.TabIndex = 2;
+ this.button3.Text = "Wing up";
+ this.button3.UseVisualStyleBackColor = true;
+ this.button3.Click += new System.EventHandler(this.button3_Click);
+ //
+ // button4
+ //
+ this.button4.Location = new System.Drawing.Point(141, 122);
+ this.button4.Name = "button4";
+ this.button4.Size = new System.Drawing.Size(129, 23);
+ this.button4.TabIndex = 3;
+ this.button4.Text = "Wing down";
+ this.button4.UseVisualStyleBackColor = true;
+ this.button4.Click += new System.EventHandler(this.button4_Click);
+ //
+ // button5
+ //
+ this.button5.Location = new System.Drawing.Point(276, 232);
+ this.button5.Name = "button5";
+ this.button5.Size = new System.Drawing.Size(131, 23);
+ this.button5.TabIndex = 4;
+ this.button5.Text = "Say \"Hello !\"";
+ this.button5.UseVisualStyleBackColor = true;
+ this.button5.Click += new System.EventHandler(this.button5_Click);
+ //
+ // button6
+ //
+ this.button6.Location = new System.Drawing.Point(6, 151);
+ this.button6.Name = "button6";
+ this.button6.Size = new System.Drawing.Size(129, 23);
+ this.button6.TabIndex = 5;
+ this.button6.Text = "Open mouth";
+ this.button6.UseVisualStyleBackColor = true;
+ this.button6.Click += new System.EventHandler(this.button6_Click);
+ //
+ // button7
+ //
+ this.button7.Location = new System.Drawing.Point(141, 151);
+ this.button7.Name = "button7";
+ this.button7.Size = new System.Drawing.Size(129, 23);
+ this.button7.TabIndex = 6;
+ this.button7.Text = "Close mouth";
+ this.button7.UseVisualStyleBackColor = true;
+ this.button7.Click += new System.EventHandler(this.button7_Click);
+ //
+ // button8
+ //
+ this.button8.Location = new System.Drawing.Point(6, 180);
+ this.button8.Name = "button8";
+ this.button8.Size = new System.Drawing.Size(129, 23);
+ this.button8.TabIndex = 7;
+ this.button8.Text = "5 left rotations";
+ this.button8.UseVisualStyleBackColor = true;
+ this.button8.Click += new System.EventHandler(this.button8_Click);
+ //
+ // button9
+ //
+ this.button9.Location = new System.Drawing.Point(141, 180);
+ this.button9.Name = "button9";
+ this.button9.Size = new System.Drawing.Size(129, 23);
+ this.button9.TabIndex = 8;
+ this.button9.Text = "5 right rotations";
+ this.button9.UseVisualStyleBackColor = true;
+ this.button9.Click += new System.EventHandler(this.button9_Click);
+ //
+ // button10
+ //
+ this.button10.Location = new System.Drawing.Point(141, 35);
+ this.button10.Name = "button10";
+ this.button10.Size = new System.Drawing.Size(129, 23);
+ this.button10.TabIndex = 10;
+ this.button10.Text = "Eyes\'s leds off";
+ this.button10.UseVisualStyleBackColor = true;
+ this.button10.Click += new System.EventHandler(this.button10_Click);
+ //
+ // button11
+ //
+ this.button11.Location = new System.Drawing.Point(6, 35);
+ this.button11.Name = "button11";
+ this.button11.Size = new System.Drawing.Size(129, 23);
+ this.button11.TabIndex = 9;
+ this.button11.Text = "Eyes\'s leds on";
+ this.button11.UseVisualStyleBackColor = true;
+ this.button11.Click += new System.EventHandler(this.button11_Click);
+ //
+ // button12
+ //
+ this.button12.Location = new System.Drawing.Point(6, 64);
+ this.button12.Name = "button12";
+ this.button12.Size = new System.Drawing.Size(129, 23);
+ this.button12.TabIndex = 11;
+ this.button12.Text = "Left eye led on";
+ this.button12.UseVisualStyleBackColor = true;
+ this.button12.Click += new System.EventHandler(this.button12_Click);
+ //
+ // button13
+ //
+ this.button13.Location = new System.Drawing.Point(6, 93);
+ this.button13.Name = "button13";
+ this.button13.Size = new System.Drawing.Size(129, 23);
+ this.button13.TabIndex = 12;
+ this.button13.Text = "Right eye led on";
+ this.button13.UseVisualStyleBackColor = true;
+ this.button13.Click += new System.EventHandler(this.button13_Click);
+ //
+ // button14
+ //
+ this.button14.Location = new System.Drawing.Point(141, 93);
+ this.button14.Name = "button14";
+ this.button14.Size = new System.Drawing.Size(129, 23);
+ this.button14.TabIndex = 14;
+ this.button14.Text = "Right eye led off";
+ this.button14.UseVisualStyleBackColor = true;
+ this.button14.Click += new System.EventHandler(this.button14_Click);
+ //
+ // button15
+ //
+ this.button15.Location = new System.Drawing.Point(141, 64);
+ this.button15.Name = "button15";
+ this.button15.Size = new System.Drawing.Size(129, 23);
+ this.button15.TabIndex = 13;
+ this.button15.Text = "Left eye led off";
+ this.button15.UseVisualStyleBackColor = true;
+ this.button15.Click += new System.EventHandler(this.button15_Click);
+ //
+ // button17
+ //
+ this.button17.Location = new System.Drawing.Point(6, 232);
+ this.button17.Name = "button17";
+ this.button17.Size = new System.Drawing.Size(129, 23);
+ this.button17.TabIndex = 16;
+ this.button17.Text = "Play test attitune";
+ this.button17.UseVisualStyleBackColor = true;
+ this.button17.Click += new System.EventHandler(this.button17_Click);
+ //
+ // button18
+ //
+ this.button18.Location = new System.Drawing.Point(6, 261);
+ this.button18.Name = "button18";
+ this.button18.Size = new System.Drawing.Size(129, 23);
+ this.button18.TabIndex = 17;
+ this.button18.Text = "Stop attitune";
+ this.button18.UseVisualStyleBackColor = true;
+ this.button18.Click += new System.EventHandler(this.button18_Click);
+ //
+ // button19
+ //
+ this.button19.Location = new System.Drawing.Point(141, 261);
+ this.button19.Name = "button19";
+ this.button19.Size = new System.Drawing.Size(129, 23);
+ this.button19.TabIndex = 19;
+ this.button19.Text = "Stop playing sound";
+ this.button19.UseVisualStyleBackColor = true;
+ this.button19.Click += new System.EventHandler(this.button19_Click);
+ //
+ // button20
+ //
+ this.button20.Location = new System.Drawing.Point(141, 232);
+ this.button20.Name = "button20";
+ this.button20.Size = new System.Drawing.Size(129, 23);
+ this.button20.TabIndex = 18;
+ this.button20.Text = "Play test sound";
+ this.button20.UseVisualStyleBackColor = true;
+ this.button20.Click += new System.EventHandler(this.button20_Click);
+ //
+ // button16
+ //
+ this.button16.Location = new System.Drawing.Point(276, 6);
+ this.button16.Name = "button16";
+ this.button16.Size = new System.Drawing.Size(161, 23);
+ this.button16.TabIndex = 20;
+ this.button16.Text = "Eyes motors in action ?";
+ this.button16.UseVisualStyleBackColor = true;
+ this.button16.Click += new System.EventHandler(this.button16_Click);
+ //
+ // button21
+ //
+ this.button21.Location = new System.Drawing.Point(610, 35);
+ this.button21.Name = "button21";
+ this.button21.Size = new System.Drawing.Size(161, 23);
+ this.button21.TabIndex = 21;
+ this.button21.Text = "Light level";
+ this.button21.UseVisualStyleBackColor = true;
+ this.button21.Click += new System.EventHandler(this.button21_Click);
+ //
+ // button22
+ //
+ this.button22.Location = new System.Drawing.Point(276, 64);
+ this.button22.Name = "button22";
+ this.button22.Size = new System.Drawing.Size(161, 23);
+ this.button22.TabIndex = 22;
+ this.button22.Text = "Left led status";
+ this.button22.UseVisualStyleBackColor = true;
+ this.button22.Click += new System.EventHandler(this.button22_Click);
+ //
+ // button23
+ //
+ this.button23.Location = new System.Drawing.Point(276, 93);
+ this.button23.Name = "button23";
+ this.button23.Size = new System.Drawing.Size(161, 23);
+ this.button23.TabIndex = 23;
+ this.button23.Text = "Right led status";
+ this.button23.UseVisualStyleBackColor = true;
+ this.button23.Click += new System.EventHandler(this.button23_Click);
+ //
+ // button24
+ //
+ this.button24.Location = new System.Drawing.Point(276, 122);
+ this.button24.Name = "button24";
+ this.button24.Size = new System.Drawing.Size(161, 23);
+ this.button24.TabIndex = 24;
+ this.button24.Text = "Wing motors in action ?";
+ this.button24.UseVisualStyleBackColor = true;
+ this.button24.Click += new System.EventHandler(this.button24_Click);
+ //
+ // button25
+ //
+ this.button25.Location = new System.Drawing.Point(276, 151);
+ this.button25.Name = "button25";
+ this.button25.Size = new System.Drawing.Size(161, 23);
+ this.button25.TabIndex = 25;
+ this.button25.Text = "Mouth motor in action ?";
+ this.button25.UseVisualStyleBackColor = true;
+ this.button25.Click += new System.EventHandler(this.button25_Click);
+ //
+ // button26
+ //
+ this.button26.Location = new System.Drawing.Point(276, 180);
+ this.button26.Name = "button26";
+ this.button26.Size = new System.Drawing.Size(161, 23);
+ this.button26.TabIndex = 26;
+ this.button26.Text = "Status \"spin\" left (motor)";
+ this.button26.UseVisualStyleBackColor = true;
+ this.button26.Click += new System.EventHandler(this.button26_Click);
+ //
+ // button27
+ //
+ this.button27.Location = new System.Drawing.Point(443, 180);
+ this.button27.Name = "button27";
+ this.button27.Size = new System.Drawing.Size(161, 23);
+ this.button27.TabIndex = 27;
+ this.button27.Text = "Status \"spin\" right (motor)";
+ this.button27.UseVisualStyleBackColor = true;
+ this.button27.Click += new System.EventHandler(this.button27_Click);
+ //
+ // button28
+ //
+ this.button28.Location = new System.Drawing.Point(443, 6);
+ this.button28.Name = "button28";
+ this.button28.Size = new System.Drawing.Size(161, 23);
+ this.button28.TabIndex = 28;
+ this.button28.Text = "Eyes\'s position";
+ this.button28.UseVisualStyleBackColor = true;
+ this.button28.Click += new System.EventHandler(this.button28_Click);
+ //
+ // button29
+ //
+ this.button29.Location = new System.Drawing.Point(443, 122);
+ this.button29.Name = "button29";
+ this.button29.Size = new System.Drawing.Size(161, 23);
+ this.button29.TabIndex = 29;
+ this.button29.Text = "Wings\'s position";
+ this.button29.UseVisualStyleBackColor = true;
+ this.button29.Click += new System.EventHandler(this.button29_Click);
+ //
+ // button30
+ //
+ this.button30.Location = new System.Drawing.Point(443, 151);
+ this.button30.Name = "button30";
+ this.button30.Size = new System.Drawing.Size(161, 23);
+ this.button30.TabIndex = 30;
+ this.button30.Text = "Position de la bouche";
+ this.button30.UseVisualStyleBackColor = true;
+ this.button30.Click += new System.EventHandler(this.button30_Click);
+ //
+ // button31
+ //
+ this.button31.Location = new System.Drawing.Point(610, 180);
+ this.button31.Name = "button31";
+ this.button31.Size = new System.Drawing.Size(161, 23);
+ this.button31.TabIndex = 31;
+ this.button31.Text = "Spin position";
+ this.button31.UseVisualStyleBackColor = true;
+ this.button31.Click += new System.EventHandler(this.button31_Click);
+ //
+ // button32
+ //
+ this.button32.Location = new System.Drawing.Point(443, 232);
+ this.button32.Name = "button32";
+ this.button32.Size = new System.Drawing.Size(161, 23);
+ this.button32.TabIndex = 901;
+ this.button32.Text = "Battery status";
+ this.button32.UseVisualStyleBackColor = true;
+ this.button32.Click += new System.EventHandler(this.button32_Click);
+ //
+ // button33
+ //
+ this.button33.Location = new System.Drawing.Point(443, 261);
+ this.button33.Name = "button33";
+ this.button33.Size = new System.Drawing.Size(161, 23);
+ this.button33.TabIndex = 902;
+ this.button33.Text = "Battery level";
+ this.button33.UseVisualStyleBackColor = true;
+ this.button33.Click += new System.EventHandler(this.button33_Click);
+ //
+ // button34
+ //
+ this.button34.Location = new System.Drawing.Point(610, 232);
+ this.button34.Name = "button34";
+ this.button34.Size = new System.Drawing.Size(161, 23);
+ this.button34.TabIndex = 903;
+ this.button34.Text = "Charger state";
+ this.button34.UseVisualStyleBackColor = true;
+ this.button34.Click += new System.EventHandler(this.button34_Click);
+ //
+ // button35
+ //
+ this.button35.Location = new System.Drawing.Point(3, 6);
+ this.button35.Name = "button35";
+ this.button35.Size = new System.Drawing.Size(172, 23);
+ this.button35.TabIndex = 904;
+ this.button35.Text = "Search the light";
+ this.button35.UseVisualStyleBackColor = true;
+ this.button35.Click += new System.EventHandler(this.button35_Click);
+ //
+ // tabControl1
+ //
+ this.tabControl1.Controls.Add(this.tabPage1);
+ this.tabControl1.Controls.Add(this.tabPage2);
+ this.tabControl1.Location = new System.Drawing.Point(12, 12);
+ this.tabControl1.Name = "tabControl1";
+ this.tabControl1.SelectedIndex = 0;
+ this.tabControl1.Size = new System.Drawing.Size(784, 325);
+ this.tabControl1.TabIndex = 905;
+ //
+ // tabPage1
+ //
+ this.tabPage1.Controls.Add(this.button41);
+ this.tabPage1.Controls.Add(this.button40);
+ this.tabPage1.Controls.Add(this.button39);
+ this.tabPage1.Controls.Add(this.button2);
+ this.tabPage1.Controls.Add(this.button1);
+ this.tabPage1.Controls.Add(this.button34);
+ this.tabPage1.Controls.Add(this.button3);
+ this.tabPage1.Controls.Add(this.button33);
+ this.tabPage1.Controls.Add(this.button4);
+ this.tabPage1.Controls.Add(this.button32);
+ this.tabPage1.Controls.Add(this.button5);
+ this.tabPage1.Controls.Add(this.button31);
+ this.tabPage1.Controls.Add(this.button6);
+ this.tabPage1.Controls.Add(this.button30);
+ this.tabPage1.Controls.Add(this.button7);
+ this.tabPage1.Controls.Add(this.button29);
+ this.tabPage1.Controls.Add(this.button8);
+ this.tabPage1.Controls.Add(this.button28);
+ this.tabPage1.Controls.Add(this.button9);
+ this.tabPage1.Controls.Add(this.button27);
+ this.tabPage1.Controls.Add(this.button11);
+ this.tabPage1.Controls.Add(this.button26);
+ this.tabPage1.Controls.Add(this.button10);
+ this.tabPage1.Controls.Add(this.button25);
+ this.tabPage1.Controls.Add(this.button12);
+ this.tabPage1.Controls.Add(this.button24);
+ this.tabPage1.Controls.Add(this.button13);
+ this.tabPage1.Controls.Add(this.button23);
+ this.tabPage1.Controls.Add(this.button15);
+ this.tabPage1.Controls.Add(this.button22);
+ this.tabPage1.Controls.Add(this.button14);
+ this.tabPage1.Controls.Add(this.button21);
+ this.tabPage1.Controls.Add(this.button17);
+ this.tabPage1.Controls.Add(this.button16);
+ this.tabPage1.Controls.Add(this.button18);
+ this.tabPage1.Controls.Add(this.button19);
+ this.tabPage1.Controls.Add(this.button20);
+ this.tabPage1.Location = new System.Drawing.Point(4, 22);
+ this.tabPage1.Name = "tabPage1";
+ this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPage1.Size = new System.Drawing.Size(776, 299);
+ this.tabPage1.TabIndex = 0;
+ this.tabPage1.Text = "Control Tux Droid";
+ this.tabPage1.UseVisualStyleBackColor = true;
+ //
+ // button41
+ //
+ this.button41.Location = new System.Drawing.Point(443, 93);
+ this.button41.Name = "button41";
+ this.button41.Size = new System.Drawing.Size(161, 23);
+ this.button41.TabIndex = 906;
+ this.button41.Text = "Blink right led";
+ this.button41.UseVisualStyleBackColor = true;
+ this.button41.Click += new System.EventHandler(this.button41_Click);
+ //
+ // button40
+ //
+ this.button40.Location = new System.Drawing.Point(443, 64);
+ this.button40.Name = "button40";
+ this.button40.Size = new System.Drawing.Size(161, 23);
+ this.button40.TabIndex = 905;
+ this.button40.Text = "Blink left led";
+ this.button40.UseVisualStyleBackColor = true;
+ this.button40.Click += new System.EventHandler(this.button40_Click);
+ //
+ // button39
+ //
+ this.button39.Location = new System.Drawing.Point(276, 35);
+ this.button39.Name = "button39";
+ this.button39.Size = new System.Drawing.Size(161, 23);
+ this.button39.TabIndex = 904;
+ this.button39.Text = "Blink the eyes";
+ this.button39.UseVisualStyleBackColor = true;
+ this.button39.Click += new System.EventHandler(this.button39_Click);
+ //
+ // tabPage2
+ //
+ this.tabPage2.Controls.Add(this.button38);
+ this.tabPage2.Controls.Add(this.button37);
+ this.tabPage2.Controls.Add(this.button36);
+ this.tabPage2.Controls.Add(this.button35);
+ this.tabPage2.Location = new System.Drawing.Point(4, 22);
+ this.tabPage2.Name = "tabPage2";
+ this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPage2.Size = new System.Drawing.Size(776, 299);
+ this.tabPage2.TabIndex = 1;
+ this.tabPage2.Text = "Gadget like";
+ this.tabPage2.UseVisualStyleBackColor = true;
+ //
+ // button38
+ //
+ this.button38.Location = new System.Drawing.Point(352, 52);
+ this.button38.Name = "button38";
+ this.button38.Size = new System.Drawing.Size(172, 23);
+ this.button38.TabIndex = 907;
+ this.button38.Text = "Meteo";
+ this.button38.UseVisualStyleBackColor = true;
+ this.button38.Click += new System.EventHandler(this.button38_Click);
+ //
+ // button37
+ //
+ this.button37.Location = new System.Drawing.Point(3, 52);
+ this.button37.Name = "button37";
+ this.button37.Size = new System.Drawing.Size(172, 23);
+ this.button37.TabIndex = 906;
+ this.button37.Text = "What day are we ?";
+ this.button37.UseVisualStyleBackColor = true;
+ this.button37.Click += new System.EventHandler(this.button37_Click);
+ //
+ // button36
+ //
+ this.button36.Location = new System.Drawing.Point(181, 52);
+ this.button36.Name = "button36";
+ this.button36.Size = new System.Drawing.Size(165, 23);
+ this.button36.TabIndex = 905;
+ this.button36.Text = "What time is it ?";
+ this.button36.UseVisualStyleBackColor = true;
+ this.button36.Click += new System.EventHandler(this.button36_Click);
+ //
+ // Form1
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(803, 350);
+ this.Controls.Add(this.tabControl1);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.Name = "Form1";
+ this.Text = "TuxAPIDemo -- Control Tux Droid C# --";
+ this.Load += new System.EventHandler(this.Form1_Load);
+ this.tabControl1.ResumeLayout(false);
+ this.tabPage1.ResumeLayout(false);
+ this.tabPage2.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.Button button2;
+ private System.Windows.Forms.Button button3;
+ private System.Windows.Forms.Button button4;
+ private System.Windows.Forms.Button button5;
+ private System.Windows.Forms.Button button6;
+ private System.Windows.Forms.Button button7;
+ private System.Windows.Forms.Button button8;
+ private System.Windows.Forms.Button button9;
+ private System.Windows.Forms.Button button10;
+ private System.Windows.Forms.Button button11;
+ private System.Windows.Forms.Button button12;
+ private System.Windows.Forms.Button button13;
+ private System.Windows.Forms.Button button14;
+ private System.Windows.Forms.Button button15;
+ private System.Windows.Forms.Button button17;
+ private System.Windows.Forms.Button button18;
+ private System.Windows.Forms.Button button19;
+ private System.Windows.Forms.Button button20;
+ private System.Windows.Forms.Button button16;
+ private System.Windows.Forms.Button button21;
+ private System.Windows.Forms.Button button22;
+ private System.Windows.Forms.Button button23;
+ private System.Windows.Forms.Button button24;
+ private System.Windows.Forms.Button button25;
+ private System.Windows.Forms.Button button26;
+ private System.Windows.Forms.Button button27;
+ private System.Windows.Forms.Button button28;
+ private System.Windows.Forms.Button button29;
+ private System.Windows.Forms.Button button30;
+ private System.Windows.Forms.Button button31;
+ private System.Windows.Forms.Button button32;
+ private System.Windows.Forms.Button button33;
+ private System.Windows.Forms.Button button34;
+ private System.Windows.Forms.Button button35;
+ private System.Windows.Forms.TabControl tabControl1;
+ private System.Windows.Forms.TabPage tabPage1;
+ private System.Windows.Forms.TabPage tabPage2;
+ private System.Windows.Forms.Button button36;
+ private System.Windows.Forms.Button button37;
+ private System.Windows.Forms.Button button38;
+ private System.Windows.Forms.Button button41;
+ private System.Windows.Forms.Button button40;
+ private System.Windows.Forms.Button button39;
+ }
+}
+
Added: software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Form1.cs
===================================================================
--- software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Form1.cs (rev 0)
+++ software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Form1.cs 2009-05-30 14:39:36 UTC (rev 4714)
@@ -0,0 +1,375 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Windows.Forms;
+using System.Threading; //sleep
+using System.IO; //
+
+namespace TuxAPIDemo
+{
+ using TuxAPI;
+
+ public partial class Form1 : Form
+ {
+ public Form1()
+ {
+ InitializeComponent();
+ }
+
+ private void Form1_Load(object sender, EventArgs e)
+ {
+ TuxAPI.TuxAPI_Host = "127.0.0.1";
+ TuxAPI.TuxAPI_Port = "270";
+
+ TuxButtonEventMgr buttonEventMgr = new TuxButtonEventMgr();
+ buttonEventMgr.OnHeadButtonPressed += new TuxButtonEventMgr.HeadButtonPressedEventHandler(buttonEvent_OnHeadButtonPressed);
+ buttonEventMgr.OnLeftButtonPressed += new TuxButtonEventMgr.LeftButtonPressedEventHandler(buttonEvent_OnLeftButtonPressed);
+ buttonEventMgr.OnRightButtonPressed += new TuxButtonEventMgr.RightButtonPressedEventHandler(buttonEvent_OnRightButtonPressed);
+ buttonEventMgr.Start(); //start the manager
+
+
+ //OK NEW TEST:
+ TuxDateTimeEventMgr TimeEventMgr = new TuxDateTimeEventMgr();
+ TimeEventMgr.OnHourChange += new TuxDateTimeEventMgr.HourChangeEventHandler(TimeEventMgr_OnHourChange);
+ TimeEventMgr.Start();
+ }
+
+ void TimeEventMgr_OnHourChange(object sender, TuxDateTimeEventArgs e)
+ {
+ TuxAPI.Speak(TuxAPI.TuxAPI_SPEAK_LOCUTOR.Bruno, 100, "Il est " + DateTime.Now.Hour.ToString() + " heure et " + DateTime.Now.Minute.ToString() + " minutes");
+ }
+
+ void buttonEvent_OnHeadButtonPressed(object sender, TuxButtonEventArgs e)
+ {
+ if (e.buttonPressed)
+ {
+ //MessageBox.Show("MA TETE !");
+ TuxAPI.Speak(TuxAPI.TuxAPI_SPEAK_LOCUTOR.Bruno, 180, "Aille !");
+ }
+ }
+
+ void buttonEvent_OnLeftButtonPressed(object sender, TuxButtonEventArgs e)
+ {
+ if (e.buttonPressed)
+ {
+ //MessageBox.Show("Mon aille gauche !");
+ TuxAPI.Speak(TuxAPI.TuxAPI_SPEAK_LOCUTOR.Bruno, 180, "Lache mon aile gauche !");
+ }
+ }
+
+ void buttonEvent_OnRightButtonPressed(object sender, TuxButtonEventArgs e)
+ {
+ if (e.buttonPressed)
+ {
+ //MessageBox.Show("Mon aile droite !");
+ TuxAPI.Speak(TuxAPI.TuxAPI_SPEAK_LOCUTOR.Bruno, 180, "Lache mon aile droite !");
+ }
+ }
+
+
+ private void button1_Click(object sender, EventArgs e)
+ {
+ TuxAPI.Eyes_Close();
+ }
+
+ private void button2_Click(object sender, EventArgs e)
+ {
+ TuxAPI.Eyes_Open();
+ }
+
+ private void button3_Click(object sender, EventArgs e)
+ {
+ TuxAPI.Flippers_Up();
+ }
+
+ private void button4_Click(object sender, EventArgs e)
+ {
+ TuxAPI.Flippers_Down();
+ }
+
+ private void button5_Click(object sender, EventArgs e)
+ {
+ //TuxAPI.Speak("Bonjour");
+ TuxAPI.Speak(TuxAPI.TuxAPI_SPEAK_LOCUTOR.Bruno, 100, "Bonjour"); //un petit test (qui fonctionne ^^)
+ }
+
+ private void button6_Click(object sender, EventArgs e)
+ {
+ TuxAPI.Mouth_Open();
+ }
+
+ private void button7_Click(object sender, EventArgs e)
+ {
+ TuxAPI.Mouth_Close();
+ }
+
+ private void button8_Click(object sender, EventArgs e)
+ {
+ TuxAPI.Rotation_Left(5);
+ }
+
+ private void button9_Click(object sender, EventArgs e)
+ {
+ TuxAPI.Rotation_Right(5);
+ }
+
+ private void button11_Click(object sender, EventArgs e)
+ {
+ TuxAPI.Leds_On();
+ }
+
+ private void button10_Click(object sender, EventArgs e)
+ {
+ TuxAPI.Leds_Off();
+ }
+
+ private void button12_Click(object sender, EventArgs e)
+ {
+ TuxAPI.Leds_On(TuxAPI.TuxAPI_LEDS.LED_LEFT);
+ }
+
+ private void button13_Click(object sender, EventArgs e)
+ {
+ TuxAPI.Leds_On(TuxAPI.TuxAPI_LEDS.LED_RIGHT);
+ }
+
+ private void button15_Click(object sender, EventArgs e)
+ {
+ TuxAPI.Leds_Off(TuxAPI.TuxAPI_LEDS.LED_LEFT);
+ }
+
+ private void button14_Click(object sender, EventArgs e)
+ {
+ TuxAPI.Leds_Off(TuxAPI.TuxAPI_LEDS.LED_RIGHT);
+ }
+
+ private void button39_Click(object sender, EventArgs e)
+ {
+ TuxAPI.Leds_Blink(TuxAPI.TuxAPI_LEDS.LED_BOTH, 10, 0.1);
+ }
+
+ private void button40_Click(object sender, EventArgs e)
+ {
+ TuxAPI.Leds_Blink(TuxAPI.TuxAPI_LEDS.LED_LEFT, 10, 0.1);
+ }
+
+ private void button41_Click(object sender, EventArgs e)
+ {
+ TuxAPI.Leds_Blink(TuxAPI.TuxAPI_LEDS.LED_RIGHT, 10, 0.1);
+ }
+
+ private void button17_Click(object sender, EventArgs e)
+ {
+ TuxAPI.PlayAttitune(Application.StartupPath + "\\attitune.att");
+ }
+
+ private void button18_Click(object sender, EventArgs e)
+ {
+ TuxAPI.StopAttitune();
+ }
+
+ private void button20_Click(object sender, EventArgs e)
+ {
+ TuxAPI.PlayWav(Application.StartupPath + "\\wav.wav");
+ }
+
+ private void button19_Click(object sender, EventArgs e)
+ {
+ TuxAPI.StopWav();
+ }
+
+ private void button16_Click(object sender, EventArgs e)
+ {
+ MessageBox.Show(TuxAPI.getStatus(TuxAPI.TuxAPI_STATUS_REQUESTED.eyes_motor_on));
+ }
+
+ private void button28_Click(object sender, EventArgs e)
+ {
+ MessageBox.Show(TuxAPI.getStatus(TuxAPI.TuxAPI_STATUS_REQUESTED.eyes_position));
+ }
+
+ private void button21_Click(object sender, EventArgs e)
+ {
+ MessageBox.Show(TuxAPI.getStatus(TuxAPI.TuxAPI_STATUS_REQUESTED.light_level));
+ }
+
+ private void button22_Click(object sender, EventArgs e)
+ {
+ MessageBox.Show(TuxAPI.getStatus(TuxAPI.TuxAPI_STATUS_REQUESTED.left_led_state));
+ }
+
+ private void button23_Click(object sender, EventArgs e)
+ {
+ MessageBox.Show(TuxAPI.getStatus(TuxAPI.TuxAPI_STATUS_REQUESTED.right_led_state));
+ }
+
+ private void button24_Click(object sender, EventArgs e)
+ {
+ MessageBox.Show(TuxAPI.getStatus(TuxAPI.TuxAPI_STATUS_REQUESTED.flippers_motor_on));
+ }
+
+ private void button29_Click(object sender, EventArgs e)
+ {
+ MessageBox.Show(TuxAPI.getStatus(TuxAPI.TuxAPI_STATUS_REQUESTED.flippers_position));
+ }
+
+ private void button25_Click(object sender, EventArgs e)
+ {
+ MessageBox.Show(TuxAPI.getStatus(TuxAPI.TuxAPI_STATUS_REQUESTED.mouth_motor_on));
+ }
+
+ private void button30_Click(object sender, EventArgs e)
+ {
+ MessageBox.Show(TuxAPI.getStatus(TuxAPI.TuxAPI_STATUS_REQUESTED.mouth_position));
+ }
+
+ private void button26_Click(object sender, EventArgs e)
+ {
+ MessageBox.Show(TuxAPI.getStatus(TuxAPI.TuxAPI_STATUS_REQUESTED.spin_left_motor_on));
+ }
+
+ private void button27_Click(object sender, EventArgs e)
+ {
+ MessageBox.Show(TuxAPI.getStatus(TuxAPI.TuxAPI_STATUS_REQUESTED.spin_right_motor_on));
+ }
+
+ private void button31_Click(object sender, EventArgs e)
+ {
+ MessageBox.Show(TuxAPI.getStatus(TuxAPI.TuxAPI_STATUS_REQUESTED.spinning_direction));
+ }
+
+ private void button32_Click(object sender, EventArgs e)
+ {
+ MessageBox.Show(TuxAPI.getStatus(TuxAPI.TuxAPI_STATUS_REQUESTED.battery_state));
+ }
+
+ private void button34_Click(object sender, EventArgs e)
+ {
+ MessageBox.Show(TuxAPI.getStatus(TuxAPI.TuxAPI_STATUS_REQUESTED.charger_state));
+ }
+
+ private void button33_Click(object sender, EventArgs e)
+ {
+ MessageBox.Show(TuxAPI.getStatus(TuxAPI.TuxAPI_STATUS_REQUESTED.battery_level));
+ }
+
+ private void button35_Click(object sender, EventArgs e)
+ {
+ //save the 4 position of light
+ double[] li_values = new double[4];
+
+ //Tux say to his master what he doing
+ TuxAPI.Speak(TuxAPI.TuxAPI_SPEAK_LOCUTOR.Bruno, 100, "Je recherche le coin le plus lumineux");
+
+ Thread.Sleep(1000);
+ li_values[0] = double.Parse(TuxAPI.getStatus(TuxAPI.TuxAPI_STATUS_REQUESTED.light_level).Replace(".", ","));
+ TuxAPI.Rotation_Left(1);
+
+ Thread.Sleep(0100);
+ li_values[1] = double.Parse(TuxAPI.getStatus(TuxAPI.TuxAPI_STATUS_REQUESTED.light_level).Replace(".", ","));
+ TuxAPI.Rotation_Left(1);
+
+ Thread.Sleep(1000);
+ li_values[2] = double.Parse(TuxAPI.getStatus(TuxAPI.TuxAPI_STATUS_REQUESTED.light_level).Replace(".", ","));
+ TuxAPI.Rotation_Left(1);
+
+ Thread.Sleep(1000);
+ li_values[3] = double.Parse(TuxAPI.getStatus(TuxAPI.TuxAPI_STATUS_REQUESTED.light_level).Replace(".", ","));
+ TuxAPI.Rotation_Left(1);
+
+ Thread.Sleep(1000);
+
+ double lum_max = li_values[0];
+ int good_pos = 0;
+
+ int i;
+ for (i = 0; i < 4; i++)
+ {
+ if (li_values[i] > lum_max)
+ {
+ lum_max = li_values[i];
+ good_pos = i;
+ }
+ }
+
+ Thread.Sleep(1000);
+
+ i = 0;
+ while (i < good_pos)
+ {
+ TuxAPI.Rotation_Left(1);
+ Thread.Sleep(1000);
+ i++;
+ }
+
+ if (good_pos == 0) //small fix
+ TuxAPI.Rotation_Left(1);
+
+ //saying to his master this is the most high level of luminosity
+ TuxAPI.Speak(TuxAPI.TuxAPI_SPEAK_LOCUTOR.Bruno, 100, "Je pense que ce coin est le plus lumineux");
+ }
+
+ private void button36_Click(object sender, EventArgs e)
+ {
+ if (int.Parse(DateTime.Now.Minute.ToString()) > 0)
+ TuxAPI.Speak(TuxAPI.TuxAPI_SPEAK_LOCUTOR.Bruno, 120, "Il est " + DateTime.Now.Hour.ToString() + " heure et " + DateTime.Now.Minute.ToString() + " minutes");
+ else
+ TuxAPI.Speak(TuxAPI.TuxAPI_SPEAK_LOCUTOR.Bruno, 120, "Il est " + DateTime.Now.Hour.ToString() + " heure");
+ }
+
+ private void button37_Click(object sender, EventArgs e)
+ {
+ string mois = string.Empty;
+
+ switch (int.Parse(DateTime.Now.Month.ToString()))
+ {
+ case 1: mois = "janvier";
+ break;
+ case 2: mois = "février";
+ break;
+ case 3: mois = "mars";
+ break;
+ case 4: mois = "avril";
+ break;
+ case 5: mois = "mai";
+ break;
+ case 6: mois = "juin";
+ break;
+ case 7: mois = "juillet";
+ break;
+ case 8: mois = "août";
+ break;
+ case 9: mois = "septembre";
+ break;
+ case 10: mois = "octobre";
+ break;
+ case 11: mois = "novembre";
+ break;
+ case 12: mois = "décembre";
+ break;
+ }
+
+ TuxAPI.Speak(TuxAPI.TuxAPI_SPEAK_LOCUTOR.Bruno, 120, "Nous somme le " + DateTime.Now.Day.ToString() + " " + mois);
+ }
+
+ private void button38_Click(object sender, EventArgs e)
+ {
+ //http://www.google.com/ig/api?hl=fr&weather=paris
+
+ /*
+ * <current_conditions>
+<condition data="Nuageux"/>
+<temp_f data="59"/>
+<temp_c data="15"/>
+<humidity data="Humidité : 63 %"/>
+<icon data="/ig/images/weather/cloudy.gif"/>
+<wind_condition data="Vent : SO à 11 km/h"/>
+</current_conditions>*/
+
+ //TODO
+
+
+ }
+ }
+}
Added: software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Form1.resx
===================================================================
--- software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Form1.resx (rev 0)
+++ software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Form1.resx 2009-05-30 14:39:36 UTC (rev 4714)
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+ <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ AAABAAEAHSAAAAEAGACoCwAAFgAAACgAAAAdAAAAQAAAAAEAGAAAAAAAAAAAAEgAAABIAAAAAAAAAAAA
+ AAD////////////+/v7+/v7+/v7+/v77/P37/P37/Pz+/v7////+/v7////+/v7////+/v77/Pz7/f77
+ /P3+/v7////+/v7///////////////////////8A/v7+/v7+/v7+/P3++/z9/P3+////////////////
+ ////+/r6+/v7+/v7+/v7+/v7/f39/////////////v///v7+/////v7+////////////////////AP//
+ //////////////////////Pw8K6/y2CBm4CWpfr5+f///////////////////////4mislSAn4+sv//8
+ +v////v9/v7+/v7+/v7+/v///////////wD+/v7+/v78+/vT4OqUvtVVmL0hgrEAgbsAiscAW5M6VWeM
+ iomdnZ6ioaGpqamdmppga3MAWZAAkM4AgL1eo8b39ff////9/v/+/v7////+/v7///////8A/P7+/v7+
+ Wq/WAZXSAJ7bAKjmBbfzDsL7EcX8CajmACA8CgUEFRUVAQAAAAAAAAAAAAsYC5XPEML6EMH6AKjmNazc
+ udzt//79/////v7+////////////CPv9/v///mi73wCy8BTE+w/A9w2+9Qy78wq99ROy5K29xvX09Pf6
+ +ujp6aipqS0rKwADCgqXzgzA+Au78g/A9wO79QKw60+96Oj0+v3+/v3+/v///////wD7/f7+/v+v1+sA
+ qOYPv/YLu/MMvPQNu/MHxfwob4TRyMX////6/Pz////////x8O9QU1cCiL0OwvwLuvELuvIQvfQHvvcA
+ tO/I6/f+/v/8/v7///////8A+v3+////lM7nAK/sEsP5DL30C7nxDcf+EJm/AAAAcHBw/v7+9vj4+vv7
+ 9fj4////1NbZFJnMB7LwCabjDLj0Cb73ILzv0e74/////f7+////////////APv9/v7+/pnQ6ACh4AKu
+ 6Qm48A289AvC9wAVH2FdXPT29vv8/Pr8/Pv8/Pr8/P39/dTY2h2x5wN2pwYwRwpWeACx7pnf9v////r9
+ /v////7+/////////wD+/v7+/v75+/3I4/Ci0OYXt/IL0P8HWnaNgn7////6+/v09fX8/v77/Pz6/Pz9
+ /v3y9PYiyvwASF0EAAAEAAAUc4zQ+v/8/fz8/v7+/v7+//////////8A////////////////////Q4CY
+ AEpmj4mH////+Pn59vj48vPz/P7++vz8+/z9+/z8+fr61fb+P1BVBAQFDQ4PMSwr9fLx/v7+/v7+////
+ ////////////AP7+/v7+//7+/vv8/fz9/jQqJwYAALKzs/z8/Pj6+vf5+fHy8vz+/vr8/Pv8/Pv8/Pf5
+ +f///2NfXgEBAQkHBwUEBN3e3v7///39/f///////////////wD////////////7+/v///+en6AAAACO
+ jo7+/v73+fn4+vrx8vL8/v76/Pz7/f37/Pz3+fn8/f5aWloAAAAJBwcNDAzn5+f////9/f3/////////
+ //////8A/////////////v7+/f39/v7+LCsrQD8/////+fv7+fv78/X1+/39+/z8+/z8+vz8+Pr6////
+ RUREAQAABQQEKikp/Pz8/v7+/v7+////////////////AP////////////////v7+/7+/pKSkgEAAcvM
+ zP////j6+vr7+/v9/fv8/Pv9/fv9/f///+vs7CwsLBkYGAAAAHFwcP////v7+///////////////////
+ /wD////////////+/v78/Pz+/v7Y2NgAAABKSkry8/P6+/v5+/v6/Pz7/f36/Pzz9PTy8/OMi4sIBwcT
+ EhIAAADPz8/////8/Pz+/v7///////////////8A/////////////////v7+/Pz8/f39SkhIAAAAvb2+
+ /Pz88PHx8/T0+/z87e3t2tvbvLy9GRgYCQgIAAAAVVNT/////Pz8/v7+////////////////////AP//
+ //////////////////39/f39/ejo6BQTE5iYmP////P29vf6+/3///f5+f///6CgoAAAAAAAADMyMvHw
+ 8Pz8/P39/f///////////////////////wD////////////////+/v7////8/Pz///++vr4oJyjp6urY
+ 09HJxcPx7Oj8/v7///9LSkoAAAANDAza2tr////8/Pz////+/v7///////////////////8A////////
+ /////////////v7+////+vr6////bGtreXJwcaO7K36tZJWy6OXkubWzDw8PCwsLeXh5////+vr6////
+ /v7+////////////////////////AP////////////////////////7+/vv7+/39/bGsqxFJZQqu3Qmz
+ 2gCQxTah0C1EUCclJDAwMOrp6f39/f39/f7+/v///////////////////////////wD/////////////
+ ///////////+/v77+/v+/v6dmZcEY5INy/8i2PUh4v4Jz/0FSWMAAABbXF3////7+/v////+/v7/////
+ //////////////////////8A////////////////////////////+/v7////npuaQERHD3acFbDXGoWe
+ Pmx2YGNjAAAAhIOD/v7++vr6/v7+////////////////////////////////AP//////////////////
+ //////////v7+////5STlF1aWIF8eiswM4mBgGhdWnl3dwAAAIyLi/7+/vr6+v7+/v//////////////
+ /////////////////wD////////////////////////////6+vr///9zcnJcXV1qa2wAAAB0dnaws7Mk
+ IyQAAACYl5f+/v77+vr///////////////////////////////////8A////////////////////////
+ ////+vr6/v7+hIODAAAABAICAwECAAAAAQAABQMDAAAAvLu7////+/v7////////////////////////
+ ////////////AP////////////////////////////z8/P///76+vgAAAAkHBwgGBgYFBSwsLA8ODiMh
+ Ifb29v39/f7+/v///////////////////////////////////wD////////////////////////////+
+ /v79/f39/f1TUVEAAAAAAAAAAAAVFRUnJibBv7/////8/Pz/////////////////////////////////
+ //////8A/////////////////////////////////v7+/v7++vr6j46OS0pKS0pKenp64eDg/////f39
+ /////v7+////////////////////////////////////AP////////////////////////////7+/v//
+ //7+/v////////////////////////z8/P////7+/v//////////////////////////////////////
+ /wD////////////////////////////////+/v7////+/v77+/v8/Pz8/Pz7+/v9/f3+/v7+/v7/////
+ //////////////////////////////////////8A////////////////////////////////////////
+ /////v7+/v7+/v7+/v7+////////////////////////////////////////////////////////AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA
+</value>
+ </data>
+</root>
\ No newline at end of file
Added: software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Program.cs
===================================================================
--- software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Program.cs (rev 0)
+++ software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Program.cs 2009-05-30 14:39:36 UTC (rev 4714)
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace TuxAPIDemo
+{
+ static class Program
+ {
+ /// <summary>
+ /// Point d'entrée principal de l'application.
+ /// </summary>
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new Form1());
+ }
+ }
+}
Added: software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Properties/AssemblyInfo.cs
===================================================================
--- software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Properties/AssemblyInfo.cs (rev 0)
+++ software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Properties/AssemblyInfo.cs 2009-05-30 14:39:36 UTC (rev 4714)
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// Les informations générales relatives à un assembly dépendent de
+// l'ensemble d'attributs suivant. Changez les valeurs de ces attributs pour modifier les informations
+// associées à un assembly.
+[assembly: AssemblyTitle("TuxAPIDemo")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Joel Matteotti")]
+[assembly: AssemblyProduct("TuxAPIDemo")]
+[assembly: AssemblyCopyright("Copyright © Joel Matteotti 2009")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// L'affectation de la valeur false à ComVisible rend les types invisibles dans cet assembly
+// aux composants COM. Si vous devez accéder à un type dans cet assembly à partir de
+// COM, affectez la valeur true à l'attribut ComVisible sur ce type.
+[assembly: ComVisible(false)]
+
+// Le GUID suivant est pour l'ID de la typelib si ce projet est exposé à COM
+[assembly: Guid("ccfd4645-0054-44f7-aa54-de4ecb74ff3e")]
+
+// Les informations de version pour un assembly se composent des quatre valeurs suivantes :
+//
+// Version principale
+// Version secondaire
+// Numéro de build
+// Révision
+//
+// Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut
+// en utilisant '*', comme indiqué ci-dessous :
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
Added: software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Properties/Resources.Designer.cs
===================================================================
--- software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Properties/Resources.Designer.cs (rev 0)
+++ software_suite_v3/smart-core/smart-api/csharp/trunk/ControlTuxDroid/TuxAPIDemo/Properties/Resources.Designer.cs 2009-05-30 14:39:36 UTC (rev 4714)
@@ -0,0 +1,63 @@
+//-------------------------------------...
[truncated message content] |
|
From: ks156 <c2m...@c2...> - 2009-05-30 14:29:17
|
Author: ks156 Date: 2009-05-30 16:29:08 +0200 (Sat, 30 May 2009) New Revision: 4713 Added: software_suite_v3/smart-core/smart-api/csharp/trunk/doc/Doxyfile software_suite_v3/smart-core/smart-api/csharp/trunk/doc/make_doc.sh Log: * Added the Doxyfile and a script to build the doc from Linux Added: software_suite_v3/smart-core/smart-api/csharp/trunk/doc/Doxyfile =================================================================== --- software_suite_v3/smart-core/smart-api/csharp/trunk/doc/Doxyfile (rev 0) +++ software_suite_v3/smart-core/smart-api/csharp/trunk/doc/Doxyfile 2009-05-30 14:29:08 UTC (rev 4713) @@ -0,0 +1,1278 @@ +# Doxyfile 1.5.2 - Doxygen configuration file for TUXCORE +# +# TUXCORE - Firmware for the 'core' CPU of tuxdroid +# Copyright (C) 2007 C2ME S.A. <tux...@c2...> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +# $Id: Doxyfile 667 2007-11-08 15:45:41Z jaguarondi $ + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file that +# follow. The default is UTF-8 which is also the encoding used for all text before +# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into +# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of +# possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = "C# API for Tux Droid" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = doc + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, +# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, +# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, +# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explicit @brief command for a brief description. + +JAVADOC_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to +# include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from the +# version control system). Doxygen will invoke the program by executing (via +# popen()) the command <command> <input-file>, where <command> is the value of +# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "r/src/myproject". Separate the files or directories +# with spaces. + +INPUT = "API" + +# This tag can be used to specify the character encoding of the source files that +# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default +# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. +# See http://www.gnu.org/software/libiconv for the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = */.svn/* */dep/* + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the output. +# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, +# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command <filter> <input-file>, where <filter> +# is the value of the INPUT_FILTER tag, and <input-file> is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentstion. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = ALL + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = __DOXYGEN__ + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = NO + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to +# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to +# specify the directory where the mscgen tool resides. If left empty the tool is assumed to +# be found in the default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = YES + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a caller dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen will always +# show the root nodes and its direct children regardless of this setting. + +DOT_GRAPH_MAX_NODES = 50 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO Added: software_suite_v3/smart-core/smart-api/csharp/trunk/doc/make_doc.sh =================================================================== --- software_suite_v3/smart-core/smart-api/csharp/trunk/doc/make_doc.sh (rev 0) +++ software_suite_v3/smart-core/smart-api/csharp/trunk/doc/make_doc.sh 2009-05-30 14:29:08 UTC (rev 4713) @@ -0,0 +1,2 @@ +#!/bin/bash +doxygen ../doc/Doxyfile Property changes on: software_suite_v3/smart-core/smart-api/csharp/trunk/doc/make_doc.sh ___________________________________________________________________ Name: svn:executable + * Name: svn:mime-type + text/x-sh Name: svn:keywords + Id Name: svn:eol-style + native |
|
From: ks156 <c2m...@c2...> - 2009-05-30 14:25:05
|
Author: ks156 Date: 2009-05-30 16:24:50 +0200 (Sat, 30 May 2009) New Revision: 4712 Added: software_suite_v3/smart-core/smart-api/csharp/trunk/doc/ Removed: software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/ software_suite_v3/smart-core/smart-api/csharp/trunk/doc/_tux_a_p_i_8cs.html software_suite_v3/smart-core/smart-api/csharp/trunk/doc/_tux_a_p_i_8cs_source.html software_suite_v3/smart-core/smart-api/csharp/trunk/doc/annotated.html software_suite_v3/smart-core/smart-api/csharp/trunk/doc/class_tux_a_p_i_1_1_tux_a_p_i-members.html software_suite_v3/smart-core/smart-api/csharp/trunk/doc/class_tux_a_p_i_1_1_tux_a_p_i.html software_suite_v3/smart-core/smart-api/csharp/trunk/doc/class_tux_a_p_i_1_1_tux_button_event_args-members.html software_suite_v3/smart-core/smart-api/csharp/trunk/doc/class_tux_a_p_i_1_1_tux_button_event_args.html software_suite_v3/smart-core/smart-api/csharp/trunk/doc/class_tux_a_p_i_1_1_tux_button_event_mgr-members.html software_suite_v3/smart-core/smart-api/csharp/trunk/doc/class_tux_a_p_i_1_1_tux_button_event_mgr.html software_suite_v3/smart-core/smart-api/csharp/trunk/doc/class_tux_a_p_i_1_1_tux_date_time_event_args-members.html software_suite_v3/smart-core/smart-api/csharp/trunk/doc/class_tux_a_p_i_1_1_tux_date_time_event_args.html software_suite_v3/smart-core/smart-api/csharp/trunk/doc/class_tux_a_p_i_1_1_tux_date_time_event_mgr-members.html software_suite_v3/smart-core/smart-api/csharp/trunk/doc/class_tux_a_p_i_1_1_tux_date_time_event_mgr.html software_suite_v3/smart-core/smart-api/csharp/trunk/doc/classes.html software_suite_v3/smart-core/smart-api/csharp/trunk/doc/doxygen.css software_suite_v3/smart-core/smart-api/csharp/trunk/doc/doxygen.png software_suite_v3/smart-core/smart-api/csharp/trunk/doc/files.html software_suite_v3/smart-core/smart-api/csharp/trunk/doc/ftv2blank.png software_suite_v3/smart-core/smart-api/csharp/trunk/doc/ftv2doc.png software_suite_v3/smart-core/smart-api/csharp/trunk/doc/ftv2folderclosed.png software_suite_v3/smart-core/smart-api/csharp/trunk/doc/ftv2folderopen.png software_suite_v3/smart-core/smart-api/csharp/trunk/doc/ftv2lastnode.png software_suite_v3/smart-core/smart-api/csharp/trunk/doc/ftv2link.png software_suite_v3/smart-core/smart-api/csharp/trunk/doc/ftv2mlastnode.png software_suite_v3/smart-core/smart-api/csharp/trunk/doc/ftv2mnode.png software_suite_v3/smart-core/smart-api/csharp/trunk/doc/ftv2node.png software_suite_v3/smart-core/smart-api/csharp/trunk/doc/ftv2plastnode.png software_suite_v3/smart-core/smart-api/csharp/trunk/doc/ftv2pnode.png software_suite_v3/smart-core/smart-api/csharp/trunk/doc/ftv2vertline.png software_suite_v3/smart-core/smart-api/csharp/trunk/doc/functions.html software_suite_v3/smart-core/smart-api/csharp/trunk/doc/functions_enum.html software_suite_v3/smart-core/smart-api/csharp/trunk/doc/functions_evnt.html software_suite_v3/smart-core/smart-api/csharp/trunk/doc/functions_func.html software_suite_v3/smart-core/smart-api/csharp/trunk/doc/functions_prop.html software_suite_v3/smart-core/smart-api/csharp/trunk/doc/index.html software_suite_v3/smart-core/smart-api/csharp/trunk/doc/main.html software_suite_v3/smart-core/smart-api/csharp/trunk/doc/namespace_tux_a_p_i.html software_suite_v3/smart-core/smart-api/csharp/trunk/doc/namespaces.html software_suite_v3/smart-core/smart-api/csharp/trunk/doc/tab_b.gif software_suite_v3/smart-core/smart-api/csharp/trunk/doc/tab_l.gif software_suite_v3/smart-core/smart-api/csharp/trunk/doc/tab_r.gif software_suite_v3/smart-core/smart-api/csharp/trunk/doc/tabs.css software_suite_v3/smart-core/smart-api/csharp/trunk/doc/tree.html Log: * Renamed "API Documentation" to "doc". It's better to avoid the spaces in the path, especially for Linux Copied: software_suite_v3/smart-core/smart-api/csharp/trunk/doc (from rev 4711, software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation) Deleted: software_suite_v3/smart-core/smart-api/csharp/trunk/doc/_tux_a_p_i_8cs.html =================================================================== --- software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/_tux_a_p_i_8cs.html 2009-05-30 12:35:03 UTC (rev 4711) +++ software_suite_v3/smart-core/smart-api/csharp/trunk/doc/_tux_a_p_i_8cs.html 2009-05-30 14:24:50 UTC (rev 4712) @@ -1,50 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> -<title>Tux C# API: C:/Documents and Settings/Administrateur/Bureau/apidoc/TuxAPI.cs File Reference</title> -<link href="tabs.css" rel="stylesheet" type="text/css"> -<link href="doxygen.css" rel="stylesheet" type="text/css"> -</head><body> -<!-- Generated by Doxygen 1.5.9 --> -<div class="navigation" id="top"> - <div class="tabs"> - <ul> - <li><a href="main.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Packages</span></a></li> - <li><a href="annotated.html"><span>Classes</span></a></li> - <li class="current"><a href="files.html"><span>Files</span></a></li> - </ul> - </div> - <div class="tabs"> - <ul> - <li><a href="files.html"><span>File List</span></a></li> - </ul> - </div> -</div> -<div class="contents"> -<h1>C:/Documents and Settings/Administrateur/Bureau/apidoc/TuxAPI.cs File Reference</h1> -<p> -<a href="_tux_a_p_i_8cs_source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0"> -<tr><td></td></tr> -<tr><td colspan="2"><br><h2>Classes</h2></td></tr> -<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="class_tux_a_p_i_1_1_tux_a_p_i.html">TuxAPI.TuxAPI</a></td></tr> - -<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="class_tux_a_p_i_1_1_tux_button_event_mgr.html">TuxAPI.TuxButtonEventMgr</a></td></tr> - -<tr><td class="mdescLeft"> </td><td class="mdescRight">Event Manager for the 3 buttons of Tux Droid. <a href="class_tux_a_p_i_1_1_tux_button_event_mgr.html#_details">More...</a><br></td></tr> -<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="class_tux_a_p_i_1_1_tux_button_event_args.html">TuxAPI.TuxButtonEventArgs</a></td></tr> - -<tr><td class="mdescLeft"> </td><td class="mdescRight">Permet de connaitre ou de donner l'état d'un bouton. <a href="class_tux_a_p_i_1_1_tux_button_event_args.html#_details">More...</a><br></td></tr> -<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="class_tux_a_p_i_1_1_tux_date_time_event_mgr.html">TuxAPI.TuxDateTimeEventMgr</a></td></tr> - -<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="class_tux_a_p_i_1_1_tux_date_time_event_args.html">TuxAPI.TuxDateTimeEventArgs</a></td></tr> - -<tr><td colspan="2"><br><h2>Packages</h2></td></tr> -<tr><td class="memItemLeft" nowrap align="right" valign="top">package </td><td class="memItemRight" valign="bottom"><a class="el" href="namespace_tux_a_p_i.html">TuxAPI</a></td></tr> - -</table> -</div> -<hr size="1"><address style="text-align: right;"><small>Generated on Sat May 30 13:14:08 2009 for Tux C# API by -<a href="http://www.doxygen.org/index.html"> -<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address> -</body> -</html> Deleted: software_suite_v3/smart-core/smart-api/csharp/trunk/doc/_tux_a_p_i_8cs_source.html =================================================================== --- software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/_tux_a_p_i_8cs_source.html 2009-05-30 12:35:03 UTC (rev 4711) +++ software_suite_v3/smart-core/smart-api/csharp/trunk/doc/_tux_a_p_i_8cs_source.html 2009-05-30 14:24:50 UTC (rev 4712) @@ -1,1151 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> -<title>Tux C# API: C:/Documents and Settings/Administrateur/Bureau/apidoc/TuxAPI.cs Source File</title> -<link href="tabs.css" rel="stylesheet" type="text/css"> -<link href="doxygen.css" rel="stylesheet" type="text/css"> -</head><body> -<!-- Generated by Doxygen 1.5.9 --> -<div class="navigation" id="top"> - <div class="tabs"> - <ul> - <li><a href="main.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Packages</span></a></li> - <li><a href="annotated.html"><span>Classes</span></a></li> - <li class="current"><a href="files.html"><span>Files</span></a></li> - </ul> - </div> - <div class="tabs"> - <ul> - <li><a href="files.html"><span>File List</span></a></li> - </ul> - </div> -<h1>C:/Documents and Settings/Administrateur/Bureau/apidoc/TuxAPI.cs</h1><a href="_tux_a_p_i_8cs.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span> -<a name="l00002"></a>00002 <span class="comment"> * C# TuxAPI</span> -<a name="l00003"></a>00003 <span class="comment"> * </span> -<a name="l00004"></a>00004 <span class="comment"> * An API written in C# for the Tux Droid</span> -<a name="l00005"></a>00005 <span class="comment"> * </span> -<a name="l00006"></a>00006 <span class="comment"> * Joel Matteotti <joel.matteotti _AT_ free _DOT_ fr></span> -<a name="l00007"></a>00007 <span class="comment"> * </span> -<a name="l00008"></a>00008 <span class="comment"> * Version 1.0.0</span> -<a name="l00009"></a>00009 <span class="comment"> * </span> -<a name="l00010"></a>00010 <span class="comment"> * =============== GPL HEADER =====================</span> -<a name="l00011"></a>00011 <span class="comment"> * This file is part of C# TuxAPI.</span> -<a name="l00012"></a>00012 <span class="comment"> *</span> -<a name="l00013"></a>00013 <span class="comment"> * C# TuxAPI is free software: you can redistribute it and/or modify</span> -<a name="l00014"></a>00014 <span class="comment"> * it under the terms of the GNU General Public License as published by</span> -<a name="l00015"></a>00015 <span class="comment"> * the Free Software Foundation, either version 3 of the License, or</span> -<a name="l00016"></a>00016 <span class="comment"> * (at your option) any later version.</span> -<a name="l00017"></a>00017 <span class="comment"> *</span> -<a name="l00018"></a>00018 <span class="comment"> * C# TuxAPI is distributed in the hope that it will be useful,</span> -<a name="l00019"></a>00019 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> -<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> -<a name="l00021"></a>00021 <span class="comment"> * GNU General Public License for more details.</span> -<a name="l00022"></a>00022 <span class="comment"> *</span> -<a name="l00023"></a>00023 <span class="comment"> * You should have received a copy of the GNU General Public License</span> -<a name="l00024"></a>00024 <span class="comment"> * along with "C# TuxAPI". If not, see <http://www.gnu.org/licenses/>.</span> -<a name="l00025"></a>00025 <span class="comment"> * </span> -<a name="l00026"></a>00026 <span class="comment"> * ====================================================</span> -<a name="l00027"></a>00027 <span class="comment"> * </span> -<a name="l00028"></a>00028 <span class="comment"> * TODO Code:</span> -<a name="l00029"></a>00029 <span class="comment"> * </span> -<a name="l00030"></a>00030 <span class="comment"> * - Complete the status part</span> -<a name="l00031"></a>00031 <span class="comment"> * - Allow the use of sound_flash</span> -<a name="l00032"></a>00032 <span class="comment"> * - Modify the 3 values of the TuxAPI_LEDS_INTENSITY_LEVEL enumeration</span> -<a name="l00033"></a>00033 <span class="comment"> * - Rename all constant of TuxAPI_STATUS_REQUESTED for more short name</span> -<a name="l00034"></a>00034 <span class="comment"> * </span> -<a name="l00035"></a>00035 <span class="comment"> * </span> -<a name="l00036"></a>00036 <span class="comment">*/</span> -<a name="l00037"></a>00037 -<a name="l00038"></a>00038 -<a name="l00039"></a>00039 <span class="comment">//blinked leds:</span> -<a name="l00040"></a>00040 <span class="comment">/*</span> -<a name="l00041"></a>00041 <span class="comment"> * count :</span> -<a name="l00042"></a>00042 <span class="comment"> <uint8></span> -<a name="l00043"></a>00043 <span class="comment">fx_speed :</span> -<a name="l00044"></a>00044 <span class="comment"> <float></span> -<a name="l00045"></a>00045 <span class="comment">fx_step :</span> -<a name="l00046"></a>00046 <span class="comment"> <uint8></span> -<a name="l00047"></a>00047 <span class="comment">fx_type :</span> -<a name="l00048"></a>00048 <span class="comment"> <<UNAFFECTED|LAST|NONE|DEFAULT|FADE_DURATION|FADE_RATE|GRADIENT_NBR|GRADIENT_DELTA>></span> -<a name="l00049"></a>00049 <span class="comment">leds :</span> -<a name="l00050"></a>00050 <span class="comment"> <<LED_BOTH|LED_RIGHT|LED_LEFT>></span> -<a name="l00051"></a>00051 <span class="comment">max_intensity :</span> -<a name="l00052"></a>00052 <span class="comment"> <float></span> -<a name="l00053"></a>00053 <span class="comment">min_intensity :</span> -<a name="l00054"></a>00054 <span class="comment"> <float></span> -<a name="l00055"></a>00055 <span class="comment">period :</span> -<a name="l00056"></a>00056 <span class="comment"> <float>*/</span> -<a name="l00057"></a>00057 -<a name="l00058"></a>00058 -<a name="l00059"></a>00059 <span class="comment">//sound flash:</span> -<a name="l00060"></a>00060 <span class="comment">/*</span> -<a name="l00061"></a>00061 <span class="comment"> * http://127.0.0.1:270/0/sound_flash/play?track=1&volume=500.0 ronflement</span> -<a name="l00062"></a>00062 <span class="comment"> * http://127.0.0.1:270/0/sound_flash/play?track=2&volume=500.0 pet + "oops"</span> -<a name="l00063"></a>00063 <span class="comment"> * http://127.0.0.1:270/0/sound_flash/play?track=3&volume=500.0 yumm</span> -<a name="l00064"></a>00064 <span class="comment"> * http://127.0.0.1:270/0/sound_flash/play?track=4&volume=500.0 "hello"</span> -<a name="l00065"></a>00065 <span class="comment"> * http://127.0.0.1:270/0/sound_flash/play?track=5&volume=500.0 "ready"</span> -<a name="l00066"></a>00066 <span class="comment"> * http://127.0.0.1:270/0/sound_flash/play?track=6&volume=500.0 "yo" </span> -<a name="l00067"></a>00067 <span class="comment"> * http://127.0.0.1:270/0/sound_flash/play?track=7&volume=500.0 (???)</span> -<a name="l00068"></a>00068 <span class="comment"> * http://127.0.0.1:270/0/sound_flash/play?track=8&volume=500.0 rire moqueur</span> -<a name="l00069"></a>00069 <span class="comment"> * http://127.0.0.1:270/0/sound_flash/play?track=9&volume=500.0 'bloop'</span> -<a name="l00070"></a>00070 <span class="comment"> * http://127.0.0.1:270/0/sound_flash/play?track=10&volume=500.0 'plock' aigue</span> -<a name="l00071"></a>00071 <span class="comment"> * http://127.0.0.1:270/0/sound_flash/play?track=11&volume=500.0 'plock' grave</span> -<a name="l00072"></a>00072 <span class="comment"> * http://127.0.0.1:270/0/sound_flash/play?track=12&volume=500.0 'touc touc'</span> -<a name="l00073"></a>00073 <span class="comment"> * http://127.0.0.1:270/0/sound_flash/play?track=13&volume=500.0 'twiing'</span> -<a name="l00074"></a>00074 <span class="comment"> * http://127.0.0.1:270/0/sound_flash/play?track=14&volume=500.0 FIRE ALARM :D</span> -<a name="l00075"></a>00075 <span class="comment"> * http://127.0.0.1:270/0/sound_flash/play?track=15&volume=500.0 moto ?</span> -<a name="l00076"></a>00076 <span class="comment"> * http://127.0.0.1:270/0/sound_flash/play?track=16&volume=500.0 'wong'</span> -<a name="l00077"></a>00077 <span class="comment"> * http://127.0.0.1:270/0/sound_flash/play?track=17&volume=500.0 coucou coucou coucou</span> -<a name="l00078"></a>00078 <span class="comment"> * </span> -<a name="l00079"></a>00079 <span class="comment"> </span> -<a name="l00080"></a>00080 <span class="comment">*/</span> -<a name="l00081"></a>00081 -<a name="l00082"></a>00082 <span class="keyword">using</span> System; -<a name="l00083"></a>00083 <span class="keyword">using</span> System.Net; -<a name="l00084"></a>00084 <span class="keyword">using</span> System.Threading; -<a name="l00085"></a>00085 -<a name="l00086"></a><a class="code" href="namespace_tux_a_p_i.html">00086</a> <span class="keyword">namespace </span><a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html">TuxAPI</a> -<a name="l00087"></a>00087 { -<a name="l00088"></a><a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html">00088</a> <span class="keyword">public</span> <span class="keyword">class </span><a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html">TuxAPI</a> -<a name="l00089"></a>00089 { -<a name="l00090"></a>00090 <span class="preprocessor"> #region ENUMERATIONS</span> -<a name="l00094"></a>00094 <span class="preprocessor"> private static WebClient wc;</span> -<a name="l00095"></a>00095 <span class="preprocessor"></span> -<a name="l00099"></a>00099 <span class="keyword">private</span> <span class="keyword">enum</span> TuxAPI_LEVEL: <span class="keywordtype">int</span> -<a name="l00100"></a>00100 { -<a name="l00101"></a>00101 CLIENT_LEVEL_ANONYME = -1, -<a name="l00102"></a>00102 CLIENT_LEVEL_FREE = 0, -<a name="l00103"></a>00103 CLIENT_LEVEL_RESTRICTED = 1, -<a name="l00104"></a>00104 CLIENT_LEVEL_ROOT = 2, -<a name="l00105"></a>00105 } -<a name="l00106"></a>00106 -<a name="l00110"></a>00110 <span class="keyword">private</span> <span class="keyword">enum</span> TuxAPI_ACTION : byte -<a name="l00111"></a>00111 { -<a name="l00112"></a>00112 FLIPPERS_UP = 1, -<a name="l00113"></a>00113 FLIPPERS_DOWN = 2, -<a name="l00114"></a>00114 -<a name="l00115"></a>00115 MOUTH_OPEN = 3, -<a name="l00116"></a>00116 MOUTH_CLOSE = 4, -<a name="l00117"></a>00117 -<a name="l00118"></a>00118 EYES_OPEN = 5, -<a name="l00119"></a>00119 EYES_CLOSE = 6, -<a name="l00120"></a>00120 -<a name="l00121"></a>00121 LEDS_ON = 7, -<a name="l00122"></a>00122 LEDS_OFF = 8, -<a name="l00123"></a>00123 -<a name="l00124"></a>00124 ROTATE_LEFT = 9, -<a name="l00125"></a>00125 ROTATE_RIGHT = 10, -<a name="l00126"></a>00126 -<a name="l00127"></a>00127 ATTITUNE_PLAY = 11, -<a name="l00128"></a>00128 ATTITUNE_STOP = 12, -<a name="l00129"></a>00129 -<a name="l00130"></a>00130 WAV_PLAY = 13, -<a name="l00131"></a>00131 WAV_STOP = 14, -<a name="l00132"></a>00132 } -<a name="l00133"></a>00133 -<a name="l00137"></a><a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#99dd95de098daeabeab6af86ebb3bcf7">00137</a> <span class="keyword">public</span> <span class="keyword">enum</span> <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#99dd95de098daeabeab6af86ebb3bcf7" title="The TTS voice (TODO: Add others voices).">TuxAPI_SPEAK_LOCUTOR</a> : byte -<a name="l00138"></a>00138 { -<a name="l00139"></a>00139 Bruno = 0, -<a name="l00140"></a>00140 Julie = 1, -<a name="l00141"></a>00141 } -<a name="l00142"></a>00142 -<a name="l00146"></a><a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#46d878fae760506b4dbad0c3dab80bb8">00146</a> <span class="keyword">public</span> <span class="keyword">enum</span> <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#46d878fae760506b4dbad0c3dab80bb8" title="3 levels of luminosity intensity i&#39;ve defined (value to check and modify !!)">TuxAPI_LEDS_INTENSITY_LEVEL</a> -<a name="l00147"></a>00147 { -<a name="l00148"></a>00148 Minimum = 0, -<a name="l00149"></a>00149 Middle = 5, -<a name="l00150"></a>00150 Maximum = 10, -<a name="l00151"></a>00151 } -<a name="l00152"></a>00152 -<a name="l00156"></a><a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#70fe51119e6f48d65fd7fbe67f89b471">00156</a> <span class="keyword">public</span> <span class="keyword">enum</span> <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#70fe51119e6f48d65fd7fbe67f89b471" title="&lt;&lt;LED_BOTH|LED_RIGHT|LED_LEFT&gt;&gt;">TuxAPI_LEDS</a> : byte -<a name="l00157"></a>00157 { -<a name="l00158"></a>00158 LED_BOTH = 0, -<a name="l00159"></a>00159 LED_LEFT = 1, -<a name="l00160"></a>00160 LED_RIGHT = 2, -<a name="l00161"></a>00161 } -<a name="l00162"></a>00162 -<a name="l00166"></a><a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#3319b7bd4bdfe84dfacd70ace79d0d71">00166</a> <span class="keyword">public</span> <span class="keyword">enum</span> <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#3319b7bd4bdfe84dfacd70ace79d0d71" title="The 3 buttons.">TuxAPI_BUTTON_REQUESTED</a> : byte -<a name="l00167"></a>00167 { -<a name="l00168"></a>00168 head_button = 0, -<a name="l00169"></a>00169 left_wing_button = 1, -<a name="l00170"></a>00170 right_wing_button = 2, -<a name="l00171"></a>00171 } -<a name="l00172"></a>00172 -<a name="l00176"></a><a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#b6e8b412c5e1d09470c6a8e75a95215b">00176</a> <span class="keyword">public</span> <span class="keyword">enum</span> <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#b6e8b412c5e1d09470c6a8e75a95215b" title="Enumeration for status request (rename all for more short name).">TuxAPI_STATUS_REQUESTED</a> : byte -<a name="l00177"></a>00177 { -<a name="l00178"></a>00178 flippers_motor_on = 0, -<a name="l00179"></a>00179 flippers_position = 1, -<a name="l00180"></a>00180 flippers_remaining_movements = 2, -<a name="l00181"></a>00181 -<a name="l00182"></a>00182 eyes_motor_on = 3, -<a name="l00183"></a>00183 eyes_position = 4, -<a name="l00184"></a>00184 eyes_remaining_movements = 5, -<a name="l00185"></a>00185 -<a name="l00186"></a>00186 mouth_motor_on = 6, -<a name="l00187"></a>00187 mouth_position = 7, -<a name="l00188"></a>00188 mouth_remaining_movements = 8, -<a name="l00189"></a>00189 -<a name="l00190"></a>00190 spin_left_motor_on = 9, -<a name="l00191"></a>00191 spin_right_motor_on = 10, -<a name="l00192"></a>00192 spinning_direction = 11, -<a name="l00193"></a>00193 spinning_remaining_movements = 12, -<a name="l00194"></a>00194 -<a name="l00195"></a>00195 light_level = 13, -<a name="l00196"></a>00196 right_led_state = 14, -<a name="l00197"></a>00197 left_led_state = 15, -<a name="l00198"></a>00198 -<a name="l00199"></a>00199 battery_level = 16, -<a name="l00200"></a>00200 battery_state = 17, -<a name="l00201"></a>00201 charger_state = 18, -<a name="l00202"></a>00202 -<a name="l00203"></a>00203 <span class="comment">//-----------</span> -<a name="l00204"></a>00204 -<a name="l00205"></a>00205 <span class="comment">/* TODO: modify the number of any status</span> -<a name="l00206"></a>00206 <span class="comment"> descriptor_complete = 4,</span> -<a name="l00207"></a>00207 <span class="comment"> radio_state = 5,</span> -<a name="l00208"></a>00208 <span class="comment"> dongle_plug = 6,</span> -<a name="l00209"></a>00209 <span class="comment"></span> -<a name="l00210"></a>00210 <span class="comment"></span> -<a name="l00211"></a>00211 <span class="comment"> connection_quality = 15,</span> -<a name="l00212"></a>00212 <span class="comment"> </span> -<a name="l00213"></a>00213 <span class="comment"> audio_flash_play = 16,</span> -<a name="l00214"></a>00214 <span class="comment"> audio_general_play = 17,</span> -<a name="l00215"></a>00215 <span class="comment"></span> -<a name="l00216"></a>00216 <span class="comment"> flash_programming_current_track = 18,</span> -<a name="l00217"></a>00217 <span class="comment"> flash_programming_last_track_size = 19,</span> -<a name="l00218"></a>00218 <span class="comment"></span> -<a name="l00219"></a>00219 <span class="comment"> tuxcore_symbolic_version = 20,</span> -<a name="l00220"></a>00220 <span class="comment"> tuxaudio_symbolic_version = 21,</span> -<a name="l00221"></a>00221 <span class="comment"> fuxusb_symbolic_version = 22,</span> -<a name="l00222"></a>00222 <span class="comment"> fuxrf_symbolic_version = 23,</span> -<a name="l00223"></a>00223 <span class="comment"> tuxrf_symbolic_version = 24,</span> -<a name="l00224"></a>00224 <span class="comment"> driver_symbolic_version = 25,</span> -<a name="l00225"></a>00225 <span class="comment"></span> -<a name="l00226"></a>00226 <span class="comment"> sound_reflash_begin = 26,</span> -<a name="l00227"></a>00227 <span class="comment"> sound_reflash_end = 27,</span> -<a name="l00228"></a>00228 <span class="comment"> sound_reflash_current_trac = 28,</span> -<a name="l00229"></a>00229 <span class="comment"></span> -<a name="l00230"></a>00230 <span class="comment"> </span> -<a name="l00231"></a>00231 <span class="comment"> left_wing_button = 34,</span> -<a name="l00232"></a>00232 <span class="comment"> sound_flash_count = 35,</span> -<a name="l00233"></a>00233 <span class="comment"></span> -<a name="l00234"></a>00234 <span class="comment"> osl_symbolic_version=38,</span> -<a name="l00235"></a>00235 <span class="comment"> general_sound_state = 39,</span> -<a name="l00236"></a>00236 <span class="comment"> wav_volume=40,</span> -<a name="l00237"></a>00237 <span class="comment"> tts_volume=41,</span> -<a name="l00238"></a>00238 <span class="comment"> tts_pitch=42,</span> -<a name="l00239"></a>00239 <span class="comment"> tts_locutor=43,</span> -<a name="l00240"></a>00240 <span class="comment"> wav_0_sound_state=44,</span> -<a name="l00241"></a>00241 <span class="comment"> wav_0_pause_state=45,</span> -<a name="l00242"></a>00242 <span class="comment"> wav_0_stop=46,</span> -<a name="l00243"></a>00243 <span class="comment"> right_wing_button=47,</span> -<a name="l00244"></a>00244 <span class="comment"> wav_1_sound_state=48,</span> -<a name="l00245"></a>00245 <span class="comment"> wav_1_pause_state=49,</span> -<a name="l00246"></a>00246 <span class="comment"> wav_1_stop=50,</span> -<a name="l00247"></a>00247 <span class="comment"> wav_2_sound_state=51,</span> -<a name="l00248"></a>00248 <span class="comment"> wav_2_pause_state=52,</span> -<a name="l00249"></a>00249 <span class="comment"> wav_2_stop=53,</span> -<a name="l00250"></a>00250 <span class="comment"> wav_3_sound_state=54,</span> -<a name="l00251"></a>00251 <span class="comment"> wav_3_pause_state=55,</span> -<a name="l00252"></a>00252 <span class="comment"> wav_3_stop=56,</span> -<a name="l00253"></a>00253 <span class="comment"> tts_0_sound_state=57,</span> -<a name="l00254"></a>00254 <span class="comment"> head_button=58,</span> -<a name="l00255"></a>00255 <span class="comment"> tts_0_pause_state=59,</span> -<a name="l00256"></a>00256 <span class="comment"> tts_0_stop=60,</span> -<a name="l00257"></a>00257 <span class="comment"> tts_0_voice_loaded=61,</span> -<a name="l00258"></a>00258 <span class="comment"> tts_0_speak_status=62,</span> -<a name="l00259"></a>00259 <span class="comment"> tts_0_voice_list=63,</span> -<a name="l00260"></a>00260 <span class="comment"> tts_wav_channel_start=64,</span> -<a name="l00261"></a>00261 <span class="comment"> None=65,</span> -<a name="l00262"></a>00262 <span class="comment"> remote_button=66,*/</span> -<a name="l00263"></a>00263 -<a name="l00264"></a>00264 -<a name="l00265"></a>00265 -<a name="l00266"></a>00266 } -<a name="l00267"></a>00267 -<a name="l00268"></a>00268 <span class="preprocessor"> #endregion</span> -<a name="l00269"></a>00269 <span class="preprocessor"></span> -<a name="l00270"></a>00270 <span class="preprocessor"> #region CONTROL METHODS</span> -<a name="l00271"></a>00271 <span class="preprocessor"></span> -<a name="l00272"></a>00272 <span class="preprocessor"> #region SERVER VARIABLES</span> -<a name="l00276"></a><a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#68c01b22f580fb22a364a8fbe07947c1">00276</a> <span class="preprocessor"> public static string TuxAPI_Host { get; set; }</span> -<a name="l00280"></a><a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#f8723a574fc2115a76f5550dbe7a4892">00280</a> <span class="preprocessor"> public static string TuxAPI_Port { get; set; }</span> -<a name="l00281"></a>00281 <span class="preprocessor"></span><span class="preprocessor"> #endregion</span> -<a name="l00282"></a>00282 <span class="preprocessor"></span> -<a name="l00283"></a>00283 <span class="preprocessor"> #region MOTORS CONTROL</span> -<a name="l00289"></a>00289 <span class="preprocessor"> private static void DoMotorAction(TuxAPI_LEVEL level, TuxAPI_ACTION action)</span> -<a name="l00290"></a>00290 <span class="preprocessor"></span> { -<a name="l00291"></a>00291 wc = <span class="keyword">new</span> WebClient(); -<a name="l00292"></a>00292 <span class="keywordtype">string</span> final_uri = <span class="keywordtype">string</span>.Empty; -<a name="l00293"></a>00293 -<a name="l00294"></a>00294 <span class="comment">//http://localhost:270/0/flippers/up?0 //permet de faire mettre les ailles en haut !</span> -<a name="l00295"></a>00295 -<a name="l00296"></a>00296 final_uri = <span class="stringliteral">"http://"</span> + <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#68c01b22f580fb22a364a8fbe07947c1" title="Tux Droid httpserver host.">TuxAPI_Host</a> + <span class="stringliteral">":"</span> + <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#f8723a574fc2115a76f5550dbe7a4892" title="Tux Droid httpserver port.">TuxAPI_Port</a> + <span class="stringliteral">"/"</span> + (int)level + <span class="stringliteral">"/"</span>; -<a name="l00297"></a>00297 -<a name="l00298"></a>00298 <span class="keywordflow">switch</span> (action) -<a name="l00299"></a>00299 { -<a name="l00300"></a>00300 <span class="keywordflow">case</span> TuxAPI_ACTION.FLIPPERS_UP: -<a name="l00301"></a>00301 { -<a name="l00302"></a>00302 final_uri = final_uri + <span class="stringliteral">"flippers/up?"</span>; -<a name="l00303"></a>00303 } -<a name="l00304"></a>00304 <span class="keywordflow">break</span>; -<a name="l00305"></a>00305 <span class="keywordflow">case</span> TuxAPI_ACTION.FLIPPERS_DOWN: -<a name="l00306"></a>00306 { -<a name="l00307"></a>00307 final_uri = final_uri + <span class="stringliteral">"flippers/down?"</span>; -<a name="l00308"></a>00308 } -<a name="l00309"></a>00309 <span class="keywordflow">break</span>; -<a name="l00310"></a>00310 <span class="keywordflow">case</span> TuxAPI_ACTION.MOUTH_OPEN: -<a name="l00311"></a>00311 { -<a name="l00312"></a>00312 final_uri = final_uri + <span class="stringliteral">"mouth/open?"</span>; -<a name="l00313"></a>00313 } -<a name="l00314"></a>00314 <span class="keywordflow">break</span>; -<a name="l00315"></a>00315 <span class="keywordflow">case</span> TuxAPI_ACTION.MOUTH_CLOSE: -<a name="l00316"></a>00316 { -<a name="l00317"></a>00317 final_uri = final_uri + <span class="stringliteral">"mouth/close?"</span>; -<a name="l00318"></a>00318 } -<a name="l00319"></a>00319 <span class="keywordflow">break</span>; -<a name="l00320"></a>00320 <span class="keywordflow">case</span> TuxAPI_ACTION.EYES_OPEN: -<a name="l00321"></a>00321 { -<a name="l00322"></a>00322 final_uri = final_uri + <span class="stringliteral">"eyes/open?"</span>; -<a name="l00323"></a>00323 } -<a name="l00324"></a>00324 <span class="keywordflow">break</span>; -<a name="l00325"></a>00325 <span class="keywordflow">case</span> TuxAPI_ACTION.EYES_CLOSE: -<a name="l00326"></a>00326 { -<a name="l00327"></a>00327 final_uri = final_uri + <span class="stringliteral">"eyes/close?"</span>; -<a name="l00328"></a>00328 } -<a name="l00329"></a>00329 <span class="keywordflow">break</span>; -<a name="l00330"></a>00330 } -<a name="l00331"></a>00331 -<a name="l00332"></a>00332 wc.DownloadString(final_uri); -<a name="l00333"></a>00333 } -<a name="l00334"></a>00334 -<a name="l00341"></a>00341 <span class="keyword">private</span> <span class="keyword">static</span> <span class="keywordtype">void</span> DoRotorAction(TuxAPI_LEVEL level, TuxAPI_ACTION action, <span class="keywordtype">int</span> rotation) -<a name="l00342"></a>00342 { -<a name="l00343"></a>00343 wc = <span class="keyword">new</span> WebClient(); -<a name="l00344"></a>00344 <span class="keywordtype">string</span> final_uri = <span class="keywordtype">string</span>.Empty; -<a name="l00345"></a>00345 -<a name="l00346"></a>00346 final_uri = <span class="stringliteral">"http://"</span> + <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#68c01b22f580fb22a364a8fbe07947c1" title="Tux Droid httpserver host.">TuxAPI_Host</a> + <span class="stringliteral">":"</span> + <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#f8723a574fc2115a76f5550dbe7a4892" title="Tux Droid httpserver port.">TuxAPI_Port</a> + <span class="stringliteral">"/"</span> + (int)level + <span class="stringliteral">"/"</span>; -<a name="l00347"></a>00347 -<a name="l00348"></a>00348 <span class="keywordflow">switch</span> (action) -<a name="l00349"></a>00349 { -<a name="l00350"></a>00350 <span class="keywordflow">case</span> TuxAPI_ACTION.ROTATE_LEFT: -<a name="l00351"></a>00351 { -<a name="l00352"></a>00352 final_uri = final_uri + <span class="stringliteral">"spinning/left_on?count="</span> + rotation; -<a name="l00353"></a>00353 } -<a name="l00354"></a>00354 <span class="keywordflow">break</span>; -<a name="l00355"></a>00355 <span class="keywordflow">case</span> TuxAPI_ACTION.ROTATE_RIGHT: -<a name="l00356"></a>00356 { -<a name="l00357"></a>00357 final_uri = final_uri + <span class="stringliteral">"spinning/right_on?count="</span> + rotation; -<a name="l00358"></a>00358 } -<a name="l00359"></a>00359 <span class="keywordflow">break</span>; -<a name="l00360"></a>00360 } -<a name="l00361"></a>00361 -<a name="l00362"></a>00362 wc.DownloadString(final_uri); -<a name="l00363"></a>00363 } -<a name="l00364"></a>00364 <span class="preprocessor"> #endregion</span> -<a name="l00365"></a>00365 <span class="preprocessor"></span> -<a name="l00366"></a>00366 <span class="preprocessor"> #region LEDS CONTROL</span> -<a name="l00373"></a>00373 <span class="preprocessor"> private static void DoLedsAction(TuxAPI_LEVEL level, TuxAPI_ACTION action, TuxAPI_LEDS leds)</span> -<a name="l00374"></a>00374 <span class="preprocessor"></span> { -<a name="l00375"></a>00375 wc = <span class="keyword">new</span> WebClient(); -<a name="l00376"></a>00376 <span class="keywordtype">string</span> final_uri = <span class="keywordtype">string</span>.Empty; -<a name="l00377"></a>00377 -<a name="l00378"></a>00378 final_uri = <span class="stringliteral">"http://"</span> + <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#68c01b22f580fb22a364a8fbe07947c1" title="Tux Droid httpserver host.">TuxAPI_Host</a> + <span class="stringliteral">":"</span> + <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#f8723a574fc2115a76f5550dbe7a4892" title="Tux Droid httpserver port.">TuxAPI_Port</a> + <span class="stringliteral">"/"</span> + (int)level + <span class="stringliteral">"/"</span>; -<a name="l00379"></a>00379 -<a name="l00380"></a>00380 <span class="preprocessor"> #region Quel action effecteur ? ouvrir/fermer </span> -<a name="l00381"></a>00381 <span class="preprocessor"></span> <span class="keywordflow">switch</span> (action) -<a name="l00382"></a>00382 { -<a name="l00383"></a>00383 <span class="keywordflow">case</span> TuxAPI_ACTION.LEDS_OFF: -<a name="l00384"></a>00384 { -<a name="l00385"></a>00385 final_uri = final_uri + <span class="stringliteral">"leds/off?leds="</span>+leds; -<a name="l00386"></a>00386 } -<a name="l00387"></a>00387 <span class="keywordflow">break</span>; -<a name="l00388"></a>00388 <span class="keywordflow">case</span> TuxAPI_ACTION.LEDS_ON: -<a name="l00389"></a>00389 { -<a name="l00390"></a>00390 final_uri = final_uri + <span class="stringliteral">"leds/on?leds="</span>+leds+<span class="stringliteral">"&intensity=10.0"</span>; <span class="comment">//dont know the real maximum of intensity TODO: change 10.0 to the maximum</span> -<a name="l00391"></a>00391 } -<a name="l00392"></a>00392 <span class="keywordflow">break</span>; -<a name="l00393"></a>00393 } -<a name="l00394"></a>00394 <span class="preprocessor"> #endregion</span> -<a name="l00395"></a>00395 <span class="preprocessor"></span> -<a name="l00396"></a>00396 wc.DownloadString(final_uri); -<a name="l00397"></a>00397 } -<a name="l00398"></a>00398 -<a name="l00406"></a>00406 <span class="keyword">private</span> <span class="keyword">static</span> <span class="keywordtype">void</span> DoLedsAction(TuxAPI_LEVEL level, TuxAPI_ACTION action, <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#70fe51119e6f48d65fd7fbe67f89b471" title="&lt;&lt;LED_BOTH|LED_RIGHT|LED_LEFT&gt;&gt;">TuxAPI_LEDS</a> leds, <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#46d878fae760506b4dbad0c3dab80bb8" title="3 levels of luminosity intensity i&#39;ve defined (value to check and modify !!)">TuxAPI_LEDS_INTENSITY_LEVEL</a> intensity) -<a name="l00407"></a>00407 { -<a name="l00408"></a>00408 wc = <span class="keyword">new</span> WebClient(); -<a name="l00409"></a>00409 <span class="keywordtype">string</span> final_uri = <span class="keywordtype">string</span>.Empty; -<a name="l00410"></a>00410 -<a name="l00411"></a>00411 final_uri = <span class="stringliteral">"http://"</span> + <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#68c01b22f580fb22a364a8fbe07947c1" title="Tux Droid httpserver host.">TuxAPI_Host</a> + <span class="stringliteral">":"</span> + <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#f8723a574fc2115a76f5550dbe7a4892" title="Tux Droid httpserver port.">TuxAPI_Port</a> + <span class="stringliteral">"/"</span> + (int)level + <span class="stringliteral">"/"</span>; -<a name="l00412"></a>00412 -<a name="l00413"></a>00413 -<a name="l00414"></a>00414 <span class="preprocessor"> #region Quel action effecteur ? ouvrir/fermer</span> -<a name="l00415"></a>00415 <span class="preprocessor"></span> <span class="keywordflow">switch</span> (action) -<a name="l00416"></a>00416 { -<a name="l00417"></a>00417 <span class="keywordflow">case</span> TuxAPI_ACTION.LEDS_OFF: -<a name="l00418"></a>00418 { -<a name="l00419"></a>00419 final_uri = final_uri + <span class="stringliteral">"leds/off?leds="</span> + leds; -<a name="l00420"></a>00420 } -<a name="l00421"></a>00421 <span class="keywordflow">break</span>; -<a name="l00422"></a>00422 <span class="keywordflow">case</span> TuxAPI_ACTION.LEDS_ON: -<a name="l00423"></a>00423 { -<a name="l00424"></a>00424 final_uri = final_uri + <span class="stringliteral">"leds/on?leds="</span> + leds + <span class="stringliteral">"&intensity="</span>+((double)intensity+0.1).ToString().Replace(<span class="stringliteral">","</span>,<span class="stringliteral">"."</span>); -<a name="l00425"></a>00425 } -<a name="l00426"></a>00426 <span class="keywordflow">break</span>; -<a name="l00427"></a>00427 } -<a name="l00428"></a>00428 <span class="preprocessor"> #endregion</span> -<a name="l00429"></a>00429 <span class="preprocessor"></span> -<a name="l00430"></a>00430 wc.DownloadString(final_uri); -<a name="l00431"></a>00431 } -<a name="l00432"></a>00432 -<a name="l00440"></a>00440 <span class="keyword">private</span> <span class="keyword">static</span> <span class="keywordtype">void</span> DoLedsAction(TuxAPI_LEVEL level, TuxAPI_ACTION action, <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#70fe51119e6f48d65fd7fbe67f89b471" title="&lt;&lt;LED_BOTH|LED_RIGHT|LED_LEFT&gt;&gt;">TuxAPI_LEDS</a> leds, <span class="keywordtype">double</span> intensity) -<a name="l00441"></a>00441 { -<a name="l00442"></a>00442 wc = <span class="keyword">new</span> WebClient(); -<a name="l00443"></a>00443 <span class="keywordtype">string</span> final_uri = <span class="keywordtype">string</span>.Empty; -<a name="l00444"></a>00444 -<a name="l00445"></a>00445 -<a name="l00446"></a>00446 final_uri = <span class="stringliteral">"http://"</span> + <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#68c01b22f580fb22a364a8fbe07947c1" title="Tux Droid httpserver host.">TuxAPI_Host</a> + <span class="stringliteral">":"</span> + <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#f8723a574fc2115a76f5550dbe7a4892" title="Tux Droid httpserver port.">TuxAPI_Port</a> + <span class="stringliteral">"/"</span> + (int)level + <span class="stringliteral">"/"</span>; -<a name="l00447"></a>00447 -<a name="l00448"></a>00448 <span class="preprocessor"> #region Quel action effecteur ? ouvrir/fermer</span> -<a name="l00449"></a>00449 <span class="preprocessor"></span> <span class="keywordflow">switch</span> (action) -<a name="l00450"></a>00450 { -<a name="l00451"></a>00451 <span class="keywordflow">case</span> TuxAPI_ACTION.LEDS_OFF: -<a name="l00452"></a>00452 { -<a name="l00453"></a>00453 final_uri = final_uri + <span class="stringliteral">"leds/off?leds="</span> + leds; -<a name="l00454"></a>00454 } -<a name="l00455"></a>00455 <span class="keywordflow">break</span>; -<a name="l00456"></a>00456 <span class="keywordflow">case</span> TuxAPI_ACTION.LEDS_ON: -<a name="l00457"></a>00457 { -<a name="l00458"></a>00458 final_uri = final_uri + <span class="stringliteral">"leds/on?leds="</span> + leds + <span class="stringliteral">"&intensity="</span> + (intensity + 0.1).ToString().Replace(<span class="stringliteral">","</span>, <span class="stringliteral">"."</span>); -<a name="l00459"></a>00459 } -<a name="l00460"></a>00460 <span class="keywordflow">break</span>; -<a name="l00461"></a>00461 } -<a name="l00462"></a>00462 <span class="preprocessor"> #endregion</span> -<a name="l00463"></a>00463 <span class="preprocessor"></span> -<a name="l00464"></a>00464 wc.DownloadString(final_uri); -<a name="l00465"></a>00465 } -<a name="l00466"></a>00466 -<a name="l00473"></a>00473 <span class="keyword">private</span> <span class="keyword">static</span> <span class="keywordtype">void</span> DoBlinkLedsAction(TuxAPI_LEVEL level, <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#70fe51119e6f48d65fd7fbe67f89b471" title="&lt;&lt;LED_BOTH|LED_RIGHT|LED_LEFT&gt;&gt;">TuxAPI_LEDS</a> leds, <span class="keywordtype">int</span> count) -<a name="l00474"></a>00474 { -<a name="l00475"></a>00475 wc = <span class="keyword">new</span> WebClient(); -<a name="l00476"></a>00476 <span class="keywordtype">string</span> final_uri = <span class="keywordtype">string</span>.Empty; -<a name="l00477"></a>00477 final_uri = <span class="stringliteral">"http://"</span> + <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#68c01b22f580fb22a364a8fbe07947c1" title="Tux Droid httpserver host.">TuxAPI_Host</a> + <span class="stringliteral">":"</span> + <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#f8723a574fc2115a76f5550dbe7a4892" title="Tux Droid httpserver port.">TuxAPI_Port</a> + <span class="stringliteral">"/"</span> + (int)level + <span class="stringliteral">"/leds/blink?count="</span> + count + <span class="stringliteral">"&delay=0.1&leds="</span> + leds; -<a name="l00478"></a>00478 wc.DownloadString(final_uri); -<a name="l00479"></a>00479 } -<a name="l00480"></a>00480 -<a name="l00488"></a>00488 <span class="keyword">private</span> <span class="keyword">static</span> <span class="keywordtype">void</span> DoBlinkLedsAction(TuxAPI_LEVEL level, <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#70fe51119e6f48d65fd7fbe67f89b471" title="&lt;&lt;LED_BOTH|LED_RIGHT|LED_LEFT&gt;&gt;">TuxAPI_LEDS</a> leds, <span class="keywordtype">int</span> count, <span class="keywordtype">double</span> delay) -<a name="l00489"></a>00489 { -<a name="l00490"></a>00490 wc = <span class="keyword">new</span> WebClient(); -<a name="l00491"></a>00491 <span class="keywordtype">string</span> final_uri = <span class="keywordtype">string</span>.Empty; -<a name="l00492"></a>00492 final_uri = <span class="stringliteral">"http://"</span> + <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#68c01b22f580fb22a364a8fbe07947c1" title="Tux Droid httpserver host.">TuxAPI_Host</a> + <span class="stringliteral">":"</span> + <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#f8723a574fc2115a76f5550dbe7a4892" title="Tux Droid httpserver port.">TuxAPI_Port</a> + <span class="stringliteral">"/"</span> + (int)level + <span class="stringliteral">"/leds/blink?count="</span> + count + <span class="stringliteral">"&delay="</span> + delay.ToString().Replace(<span class="stringliteral">","</span>, <span class="stringliteral">"."</span>) + <span class="stringliteral">"&leds="</span> + leds; -<a name="l00493"></a>00493 wc.DownloadString(final_uri); -<a name="l00494"></a>00494 } -<a name="l00495"></a>00495 <span class="preprocessor"> #endregion</span> -<a name="l00496"></a>00496 <span class="preprocessor"></span> -<a name="l00497"></a>00497 <span class="preprocessor"> #region TTS SPEECH CONTROL</span> -<a name="l00503"></a>00503 <span class="preprocessor"> private static void DoSpeak(TuxAPI_LEVEL level, string Text)</span> -<a name="l00504"></a>00504 <span class="preprocessor"></span> { -<a name="l00505"></a>00505 wc = <span class="keyword">new</span> WebClient(); -<a name="l00506"></a>00506 <span class="keywordtype">string</span> final_uri = <span class="keywordtype">string</span>.Empty; -<a name="l00507"></a>00507 -<a name="l00508"></a>00508 <span class="comment">//http://localhost:270/0/flippers/up?0 //permet de faire mettre les ailles en haut !</span> -<a name="l00509"></a>00509 -<a name="l00510"></a>00510 final_uri = <span class="stringliteral">"http://"</span> + <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#68c01b22f580fb22a364a8fbe07947c1" title="Tux Droid httpserver host.">TuxAPI_Host</a> + <span class="stringliteral">":"</span> + <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#f8723a574fc2115a76f5550dbe7a4892" title="Tux Droid httpserver port.">TuxAPI_Port</a> + <span class="stringliteral">"/"</span> + (int)level + <span class="stringliteral">"/tts/speak?text="</span> + Text; -<a name="l00511"></a>00511 -<a name="l00512"></a>00512 wc.DownloadString(final_uri); -<a name="l00513"></a>00513 } -<a name="l00514"></a>00514 -<a name="l00521"></a>00521 <span class="keyword">private</span> <span class="keyword">static</span> <span class="keywordtype">void</span> DoSpeak(TuxAPI_LEVEL level, <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#99dd95de098daeabeab6af86ebb3bcf7" title="The TTS voice (TODO: Add others voices).">TuxAPI_SPEAK_LOCUTOR</a> locutor, <span class="keywordtype">string</span> Text) -<a name="l00522"></a>00522 { -<a name="l00523"></a>00523 wc = <span class="keyword">new</span> WebClient(); -<a name="l00524"></a>00524 <span class="keywordtype">string</span> start_uri = <span class="keywordtype">string</span>.Empty; -<a name="l00525"></a>00525 <span class="keywordtype">string</span> final_url = <span class="keywordtype">string</span>.Empty; -<a name="l00526"></a>00526 -<a name="l00527"></a>00527 start_uri = <span class="stringliteral">"http://"</span> + <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#68c01b22f580fb22a364a8fbe07947c1" title="Tux Droid httpserver host.">TuxAPI_Host</a> + <span class="stringliteral">":"</span> + <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#f8723a574fc2115a76f5550dbe7a4892" title="Tux Droid httpserver port.">TuxAPI_Port</a> + <span class="stringliteral">"/"</span> + (int)level + <span class="stringliteral">"/tts/"</span>; -<a name="l00528"></a>00528 -<a name="l00529"></a>00529 <span class="comment">//1 - locutor choice</span> -<a name="l00530"></a>00530 <span class="comment">//http://127.0.0.1:270/0/tts/locutor?name=Bruno</span> -<a name="l00531"></a>00531 final_url = start_uri + <span class="stringliteral">"locutor?name="</span> + (byte)locutor; -<a name="l00532"></a>00532 wc.DownloadString(final_url); -<a name="l00533"></a>00533 -<a name="l00534"></a>00534 <span class="comment">//2 - the text</span> -<a name="l00535"></a>00535 final_url = start_uri + <span class="stringliteral">"speak?text="</span> + Text; -<a name="l00536"></a>00536 -<a name="l00537"></a>00537 wc.DownloadString(final_url); -<a name="l00538"></a>00538 } -<a name="l00539"></a>00539 -<a name="l00546"></a>00546 <span class="keyword">private</span> <span class="keyword">static</span> <span class="keywordtype">void</span> DoSpeak(TuxAPI_LEVEL level, <span class="keywordtype">int</span> pitch, <span class="keywordtype">string</span> Text) -<a name="l00547"></a>00547 { -<a name="l00548"></a>00548 wc = <span class="keyword">new</span> WebClient(); -<a name="l00549"></a>00549 <span class="keywordtype">string</span> start_uri = <span class="keywordtype">string</span>.Empty; -<a name="l00550"></a>00550 <span class="keywordtype">string</span> final_url = <span class="keywordtype">string</span>.Empty; -<a name="l00551"></a>00551 -<a name="l00552"></a>00552 start_uri = <span class="stringliteral">"http://"</span> + <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#68c01b22f580fb22a364a8fbe07947c1" title="Tux Droid httpserver host.">TuxAPI_Host</a> + <span class="stringliteral">":"</span> + <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#f8723a574fc2115a76f5550dbe7a4892" title="Tux Droid httpserver port.">TuxAPI_Port</a> + <span class="stringliteral">"/"</span> + (int)level + <span class="stringliteral">"/tts/"</span>; -<a name="l00553"></a>00553 -<a name="l00554"></a>00554 <span class="comment">//1 - pitch</span> -<a name="l00555"></a>00555 <span class="comment">//http://127.0.0.1:270/0/tts/pitch?value=10</span> -<a name="l00556"></a>00556 final_url = start_uri + <span class="stringliteral">"pitch?value="</span> + pitch; -<a name="l00557"></a>00557 wc.DownloadString(final_url); -<a name="l00558"></a>00558 -<a name="l00559"></a>00559 <span class="comment">//2 - text</span> -<a name="l00560"></a>00560 final_url = start_uri + <span class="stringliteral">"speak?text="</span> + Text; -<a name="l00561"></a>00561 -<a name="l00562"></a>00562 wc.DownloadString(final_url); -<a name="l00563"></a>00563 } -<a name="l00564"></a>00564 -<a name="l00572"></a>00572 <span class="keyword">private</span> <span class="keyword">static</span> <span class="keywordtype">void</span> DoSpeak(TuxAPI_LEVEL level, <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#99dd95de098daeabeab6af86ebb3bcf7" title="The TTS voice (TODO: Add others voices).">TuxAPI_SPEAK_LOCUTOR</a> locutor, <span class="keywordtype">int</span> pitch, <span class="keywordtype">string</span> Text) -<a name="l00573"></a>00573 { -<a name="l00574"></a>00574 wc = <span class="keyword">new</span> WebClient(); -<a name="l00575"></a>00575 <span class="keywordtype">string</span> start_uri = <span class="keywordtype">string</span>.Empty; -<a name="l00576"></a>00576 <span class="keywordtype">string</span> final_url = <span class="keywordtype">string</span>.Empty; -<a name="l00577"></a>00577 -<a name="l00578"></a>00578 start_uri = <span class="stringliteral">"http://"</span> + <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#68c01b22f580fb22a364a8fbe07947c1" title="Tux Droid httpserver host.">TuxAPI_Host</a> + <span class="stringliteral">":"</span> + <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#f8723a574fc2115a76f5550dbe7a4892" title="Tux Droid httpserver port.">TuxAPI_Port</a> + <span class="stringliteral">"/"</span> + (int)level + <span class="stringliteral">"/tts/"</span>; -<a name="l00579"></a>00579 -<a name="l00580"></a>00580 <span class="comment">//1 - l'interlocuteur</span> -<a name="l00581"></a>00581 <span class="comment">//http://127.0.0.1:270/0/tts/locutor?name=Bruno</span> -<a name="l00582"></a>00582 final_url = start_uri + <span class="stringliteral">"locutor?name="</span> + (byte)locutor; -<a name="l00583"></a>00583 wc.DownloadString(final_url); -<a name="l00584"></a>00584 -<a name="l00585"></a>00585 <span class="comment">//2 - Le pitch</span> -<a name="l00586"></a>00586 <span class="comment">//http://127.0.0.1:270/0/tts/pitch?value=10</span> -<a name="l00587"></a>00587 final_url = start_uri + <span class="stringliteral">"pitch?value="</span> + pitch; -<a name="l00588"></a>00588 wc.DownloadString(final_url); -<a name="l00589"></a>00589 -<a name="l00590"></a>00590 <span class="comment">//3 - le texte</span> -<a name="l00591"></a>00591 final_url = start_uri + <span class="stringliteral">"speak?text="</span> + Text; -<a name="l00592"></a>00592 -<a name="l00593"></a>00593 wc.DownloadString(final_url); -<a name="l00594"></a>00594 } -<a name="l00595"></a>00595 <span class="preprocessor"> #endregion</span> -<a name="l00596"></a>00596 <span class="preprocessor"></span> -<a name="l00597"></a>00597 <span class="preprocessor"> #region ATTITUNES CONTROL</span> -<a name="l00604"></a>00604 <span class="preprocessor"> private static void AttituneControl(TuxAPI_LEVEL level, TuxAPI_ACTION action, string attitune)</span> -<a name="l00605"></a>00605 <span class="preprocessor"></span> { -<a name="l00606"></a>00606 wc = <span class="keyword">new</span> WebClient(); -<a name="l00607"></a>00607 <span class="keywordtype">string</span> final_uri = <span class="keywordtype">string</span>.Empty; -<a name="l00608"></a>00608 <span class="keywordtype">string</span> final_url = <span class="keywordtype">string</span>.Empty; -<a name="l00609"></a>00609 -<a name="l00610"></a>00610 -<a name="l00611"></a>00611 final_uri = <span class="stringliteral">"http://"</span> + <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#68c01b22f580fb22a364a8fbe07947c1" title="Tux Droid httpserver host.">TuxAPI_Host</a> + <span class="stringliteral">":"</span> + <a class="code" href="class_tux_a_p_i_1_1_tux_a_p_i.html#f8723a574fc2115a76f5550dbe7a4892" title="Tux Droid httpserver port.">TuxAPI_Port</a> + <span class="stringliteral">"/"</span> + (int)level + <span class="stringliteral">"/attitune/"</span>; -<a name="l00612"></a>00612 -<a name="l00613"></a>00613 <span class="keywordflow">switch</span> (action) -<a name="l00614"></a>00614 { -<a name="l00615"></a>00615 <span class="keywordflow">case</span> TuxAPI_ACTION.ATTITUNE_PLAY: <span class="comment">//Need to fix: the attitune stopping before the end !!</span> -<a name="l00616"></a>00616 { -<a name="l00617"></a>00617 <span class="comment">//attitune/load_and_play?</span> -<a name="l00618"></a>00618 final_url = final_uri + <span class="stringliteral">"load_and_play?path="</span> + attitune; -<a name="l00619"></a>00619 final_url = final_url.Replace(<span class="stringliteral">"\\"</span>, <span class="stringliteral">"\\\\"</span>); -<a name="l00620"></a>00620 wc.DownloadString(final_url); -<a name="l00621"></a>00621 } -<a name="l00622"></a>00622 <span class="keywordflow">break</span>; -<a name="l00623"></a>00623 <span class="keywordflow">case</span> TuxAPI_ACTION.ATTITUNE_STOP: -<a name="l00624"></a>00624 { -<a name="l00625"></a>00625 final_url = final_uri + <span class="stringliteral">"stop?"</span>; -<a name="l00626"></a>00626 wc.DownloadString(final_url); -<a name="l00627"></a>00627 } -<a name="l00628"></a>00628 <span class="keywordflow">break</span>; -<a name="l00629"></a>00629 } -<a name="l00630"></a>00630 } -<a name="l00631"></a>00631 <span class="preprocessor"> #endregion</span> -<a name="l00632"></a>00632 <span class="preprocessor"></span> -<a name="l00633"></a>00633 <span class="preprocessor"> #region WAV CONTROL</span> -<a name="l00640"></a>00640 <span class="preprocessor"> private static void WavControl(TuxAPI_LEVEL level, TuxAPI_ACTION action, string sound)</span> -<a name="l00641"></a>00641 <span class="preprocessor"></sp... [truncated message content] |
Author: JDM Date: 2009-05-30 14:35:03 +0200 (Sat, 30 May 2009) New Revision: 4711 Added: software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/ software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/_tux_a_p_i_8cs.html software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/_tux_a_p_i_8cs_source.html software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/annotated.html software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/class_tux_a_p_i_1_1_tux_a_p_i-members.html software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/class_tux_a_p_i_1_1_tux_a_p_i.html software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/class_tux_a_p_i_1_1_tux_button_event_args-members.html software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/class_tux_a_p_i_1_1_tux_button_event_args.html software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/class_tux_a_p_i_1_1_tux_button_event_mgr-members.html software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/class_tux_a_p_i_1_1_tux_button_event_mgr.html software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/class_tux_a_p_i_1_1_tux_date_time_event_args-members.html software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/class_tux_a_p_i_1_1_tux_date_time_event_args.html software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/class_tux_a_p_i_1_1_tux_date_time_event_mgr-members.html software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/class_tux_a_p_i_1_1_tux_date_time_event_mgr.html software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/classes.html software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/doxygen.css software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/doxygen.png software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/files.html software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/ftv2blank.png software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/ftv2doc.png software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/ftv2folderclosed.png software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/ftv2folderopen.png software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/ftv2lastnode.png software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/ftv2link.png software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/ftv2mlastnode.png software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/ftv2mnode.png software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/ftv2node.png software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/ftv2plastnode.png software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/ftv2pnode.png software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/ftv2vertline.png software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/functions.html software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/functions_enum.html software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/functions_evnt.html software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/functions_func.html software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/functions_prop.html software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/index.html software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/main.html software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/namespace_tux_a_p_i.html software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/namespaces.html software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/tab_b.gif software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/tab_l.gif software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/tab_r.gif software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/tabs.css software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/tree.html software_suite_v3/smart-core/smart-api/csharp/trunk/API/ software_suite_v3/smart-core/smart-api/csharp/trunk/API/TuxAPI.cs software_suite_v3/smart-core/smart-api/csharp/trunk/Control Tux Droid/ software_suite_v3/smart-core/smart-api/csharp/trunk/Control Tux Droid/TuxAPIDemo.sln software_suite_v3/smart-core/smart-api/csharp/trunk/Control Tux Droid/TuxAPIDemo.suo software_suite_v3/smart-core/smart-api/csharp/trunk/Control Tux Droid/TuxAPIDemo/ software_suite_v3/smart-core/smart-api/csharp/trunk/Control Tux Droid/TuxAPIDemo/Form1.Designer.cs software_suite_v3/smart-core/smart-api/csharp/trunk/Control Tux Droid/TuxAPIDemo/Form1.cs software_suite_v3/smart-core/smart-api/csharp/trunk/Control Tux Droid/TuxAPIDemo/Form1.resx software_suite_v3/smart-core/smart-api/csharp/trunk/Control Tux Droid/TuxAPIDemo/Program.cs software_suite_v3/smart-core/smart-api/csharp/trunk/Control Tux Droid/TuxAPIDemo/Properties/ software_suite_v3/smart-core/smart-api/csharp/trunk/Control Tux Droid/TuxAPIDemo/Properties/AssemblyInfo.cs software_suite_v3/smart-core/smart-api/csharp/trunk/Control Tux Droid/TuxAPIDemo/Properties/Resources.Designer.cs software_suite_v3/smart-core/smart-api/csharp/trunk/Control Tux Droid/TuxAPIDemo/Properties/Resources.resx software_suite_v3/smart-core/smart-api/csharp/trunk/Control Tux Droid/TuxAPIDemo/Properties/Settings.Designer.cs software_suite_v3/smart-core/smart-api/csharp/trunk/Control Tux Droid/TuxAPIDemo/Properties/Settings.settings software_suite_v3/smart-core/smart-api/csharp/trunk/Control Tux Droid/TuxAPIDemo/TuxAPI.cs software_suite_v3/smart-core/smart-api/csharp/trunk/Control Tux Droid/TuxAPIDemo/TuxAPIDemo.csproj software_suite_v3/smart-core/smart-api/csharp/trunk/Control Tux Droid/TuxAPIDemo/tux.ico software_suite_v3/smart-core/smart-api/csharp/trunk/README.TXT Log: * First revision for C# API Added: software_suite_v3/smart-core/smart-api/csharp/trunk/API/TuxAPI.cs =================================================================== --- software_suite_v3/smart-core/smart-api/csharp/trunk/API/TuxAPI.cs (rev 0) +++ software_suite_v3/smart-core/smart-api/csharp/trunk/API/TuxAPI.cs 2009-05-30 12:35:03 UTC (rev 4711) @@ -0,0 +1,1301 @@ +/* + * C# TuxAPI + * + * An API written in C# for the Tux Droid + * + * Joel Matteotti <joel.matteotti _AT_ free _DOT_ fr> + * + * Version 1.0.0 + * + * =============== GPL HEADER ===================== + * This file is part of C# TuxAPI. + * + * C# TuxAPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * C# TuxAPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with "C# TuxAPI". If not, see <http://www.gnu.org/licenses/>. + * + * ==================================================== + * + * TODO Code: + * + * - Complete the status part + * - Allow the use of sound_flash + * - Modify the 3 values of the TuxAPI_LEDS_INTENSITY_LEVEL enumeration + * - Rename all constant of TuxAPI_STATUS_REQUESTED for more short name + * + * +*/ + + +//blinked leds: +/* + * count : + <uint8> +fx_speed : + <float> +fx_step : + <uint8> +fx_type : + <<UNAFFECTED|LAST|NONE|DEFAULT|FADE_DURATION|FADE_RATE|GRADIENT_NBR|GRADIENT_DELTA>> +leds : + <<LED_BOTH|LED_RIGHT|LED_LEFT>> +max_intensity : + <float> +min_intensity : + <float> +period : + <float>*/ + + +//sound flash: +/* + * http://127.0.0.1:270/0/sound_flash/play?track=1&volume=500.0 ronflement + * http://127.0.0.1:270/0/sound_flash/play?track=2&volume=500.0 pet + "oops" + * http://127.0.0.1:270/0/sound_flash/play?track=3&volume=500.0 yumm + * http://127.0.0.1:270/0/sound_flash/play?track=4&volume=500.0 "hello" + * http://127.0.0.1:270/0/sound_flash/play?track=5&volume=500.0 "ready" + * http://127.0.0.1:270/0/sound_flash/play?track=6&volume=500.0 "yo" + * http://127.0.0.1:270/0/sound_flash/play?track=7&volume=500.0 (???) + * http://127.0.0.1:270/0/sound_flash/play?track=8&volume=500.0 rire moqueur + * http://127.0.0.1:270/0/sound_flash/play?track=9&volume=500.0 'bloop' + * http://127.0.0.1:270/0/sound_flash/play?track=10&volume=500.0 'plock' aigue + * http://127.0.0.1:270/0/sound_flash/play?track=11&volume=500.0 'plock' grave + * http://127.0.0.1:270/0/sound_flash/play?track=12&volume=500.0 'touc touc' + * http://127.0.0.1:270/0/sound_flash/play?track=13&volume=500.0 'twiing' + * http://127.0.0.1:270/0/sound_flash/play?track=14&volume=500.0 FIRE ALARM :D + * http://127.0.0.1:270/0/sound_flash/play?track=15&volume=500.0 moto ? + * http://127.0.0.1:270/0/sound_flash/play?track=16&volume=500.0 'wong' + * http://127.0.0.1:270/0/sound_flash/play?track=17&volume=500.0 coucou coucou coucou + * + +*/ + +using System; +using System.Net; +using System.Threading; + +namespace TuxAPI +{ + public class TuxAPI + { + #region ENUMERATIONS + /// <summary> + /// WebClient to play with the url (i think it's not the better method but it work ATM) + /// </summary> + private static WebClient wc; + + /// <summary> + /// Access level + /// </summary> + private enum TuxAPI_LEVEL: int + { + CLIENT_LEVEL_ANONYME = -1, + CLIENT_LEVEL_FREE = 0, + CLIENT_LEVEL_RESTRICTED = 1, + CLIENT_LEVEL_ROOT = 2, + } + + /// <summary> + /// All action can do Tux + /// </summary> + private enum TuxAPI_ACTION : byte + { + FLIPPERS_UP = 1, + FLIPPERS_DOWN = 2, + + MOUTH_OPEN = 3, + MOUTH_CLOSE = 4, + + EYES_OPEN = 5, + EYES_CLOSE = 6, + + LEDS_ON = 7, + LEDS_OFF = 8, + + ROTATE_LEFT = 9, + ROTATE_RIGHT = 10, + + ATTITUNE_PLAY = 11, + ATTITUNE_STOP = 12, + + WAV_PLAY = 13, + WAV_STOP = 14, + } + + /// <summary> + /// The TTS voice (TODO: Add others voices) + /// </summary> + public enum TuxAPI_SPEAK_LOCUTOR : byte + { + Bruno = 0, + Julie = 1, + } + + /// <summary> + /// 3 levels of luminosity intensity i've defined (value to check and modify !!) + /// </summary> + public enum TuxAPI_LEDS_INTENSITY_LEVEL + { + Minimum = 0, + Middle = 5, + Maximum = 10, + } + + /// <summary> + /// //<<LED_BOTH|LED_RIGHT|LED_LEFT>> + /// </summary> + public enum TuxAPI_LEDS : byte + { + LED_BOTH = 0, + LED_LEFT = 1, + LED_RIGHT = 2, + } + + /// <summary> + /// The 3 buttons + /// </summary> + public enum TuxAPI_BUTTON_REQUESTED : byte + { + head_button = 0, + left_wing_button = 1, + right_wing_button = 2, + } + + /// <summary> + /// Enumeration for status request (rename all for more short name) + /// </summary> + public enum TuxAPI_STATUS_REQUESTED : byte + { + flippers_motor_on = 0, + flippers_position = 1, + flippers_remaining_movements = 2, + + eyes_motor_on = 3, + eyes_position = 4, + eyes_remaining_movements = 5, + + mouth_motor_on = 6, + mouth_position = 7, + mouth_remaining_movements = 8, + + spin_left_motor_on = 9, + spin_right_motor_on = 10, + spinning_direction = 11, + spinning_remaining_movements = 12, + + light_level = 13, + right_led_state = 14, + left_led_state = 15, + + battery_level = 16, + battery_state = 17, + charger_state = 18, + + //----------- + + /* TODO: modify the number of any status + descriptor_complete = 4, + radio_state = 5, + dongle_plug = 6, + + + connection_quality = 15, + + audio_flash_play = 16, + audio_general_play = 17, + + flash_programming_current_track = 18, + flash_programming_last_track_size = 19, + + tuxcore_symbolic_version = 20, + tuxaudio_symbolic_version = 21, + fuxusb_symbolic_version = 22, + fuxrf_symbolic_version = 23, + tuxrf_symbolic_version = 24, + driver_symbolic_version = 25, + + sound_reflash_begin = 26, + sound_reflash_end = 27, + sound_reflash_current_trac = 28, + + + left_wing_button = 34, + sound_flash_count = 35, + + osl_symbolic_version=38, + general_sound_state = 39, + wav_volume=40, + tts_volume=41, + tts_pitch=42, + tts_locutor=43, + wav_0_sound_state=44, + wav_0_pause_state=45, + wav_0_stop=46, + right_wing_button=47, + wav_1_sound_state=48, + wav_1_pause_state=49, + wav_1_stop=50, + wav_2_sound_state=51, + wav_2_pause_state=52, + wav_2_stop=53, + wav_3_sound_state=54, + wav_3_pause_state=55, + wav_3_stop=56, + tts_0_sound_state=57, + head_button=58, + tts_0_pause_state=59, + tts_0_stop=60, + tts_0_voice_loaded=61, + tts_0_speak_status=62, + tts_0_voice_list=63, + tts_wav_channel_start=64, + None=65, + remote_button=66,*/ + + + + } + + #endregion + + #region CONTROL METHODS + + #region SERVER VARIABLES + /// <summary> + /// Tux Droid httpserver host + /// </summary> + public static string TuxAPI_Host { get; set; } + /// <summary> + /// Tux Droid httpserver port + /// </summary> + public static string TuxAPI_Port { get; set; } + #endregion + + #region MOTORS CONTROL + /// <summary> + /// Allow Tux todo an action + /// </summary> + /// <param name="level">Access Level</param> + /// <param name="action">Action todo from enum</param> + private static void DoMotorAction(TuxAPI_LEVEL level, TuxAPI_ACTION action) + { + wc = new WebClient(); + string final_uri = string.Empty; + + //http://localhost:270/0/flippers/up?0 //permet de faire mettre les ailles en haut ! + + final_uri = "http://" + TuxAPI_Host + ":" + TuxAPI_Port + "/" + (int)level + "/"; + + switch (action) + { + case TuxAPI_ACTION.FLIPPERS_UP: + { + final_uri = final_uri + "flippers/up?"; + } + break; + case TuxAPI_ACTION.FLIPPERS_DOWN: + { + final_uri = final_uri + "flippers/down?"; + } + break; + case TuxAPI_ACTION.MOUTH_OPEN: + { + final_uri = final_uri + "mouth/open?"; + } + break; + case TuxAPI_ACTION.MOUTH_CLOSE: + { + final_uri = final_uri + "mouth/close?"; + } + break; + case TuxAPI_ACTION.EYES_OPEN: + { + final_uri = final_uri + "eyes/open?"; + } + break; + case TuxAPI_ACTION.EYES_CLOSE: + { + final_uri = final_uri + "eyes/close?"; + } + break; + } + + wc.DownloadString(final_uri); + } + + /// <summary> + /// Allow to rotate Tux + /// </summary> + /// <param name="level">Access Level</param> + /// <param name="action">Action todo from enum (left rotation or right rotation)</param> + /// <param name="rotation">Number of rotation</param> + private static void DoRotorAction(TuxAPI_LEVEL level, TuxAPI_ACTION action, int rotation) + { + wc = new WebClient(); + string final_uri = string.Empty; + + final_uri = "http://" + TuxAPI_Host + ":" + TuxAPI_Port + "/" + (int)level + "/"; + + switch (action) + { + case TuxAPI_ACTION.ROTATE_LEFT: + { + final_uri = final_uri + "spinning/left_on?count=" + rotation; + } + break; + case TuxAPI_ACTION.ROTATE_RIGHT: + { + final_uri = final_uri + "spinning/right_on?count=" + rotation; + } + break; + } + + wc.DownloadString(final_uri); + } + #endregion + + #region LEDS CONTROL + /// <summary> + /// Basic leds action On/Off + /// </summary> + /// <param name="level">Access Level</param> + /// <param name="action">Open or Close</param> + /// <param name="leds">What eye ? left or right or both ?</param> + private static void DoLedsAction(TuxAPI_LEVEL level, TuxAPI_ACTION action, TuxAPI_LEDS leds) + { + wc = new WebClient(); + string final_uri = string.Empty; + + final_uri = "http://" + TuxAPI_Host + ":" + TuxAPI_Port + "/" + (int)level + "/"; + + #region Quel action effecteur ? ouvrir/fermer + switch (action) + { + case TuxAPI_ACTION.LEDS_OFF: + { + final_uri = final_uri + "leds/off?leds="+leds; + } + break; + case TuxAPI_ACTION.LEDS_ON: + { + final_uri = final_uri + "leds/on?leds="+leds+"&intensity=10.0"; //dont know the real maximum of intensity TODO: change 10.0 to the maximum + } + break; + } + #endregion + + wc.DownloadString(final_uri); + } + + /// <summary> + /// Leds actions with intensity control choosing in the enum (don't know if this method is util ..) + /// </summary> + /// <param name="level">Access Level</param> + /// <param name="action">Open or Close</param> + /// <param name="leds">What eye ? left or right or both ?</param> + /// <param name="intensity">Intensity of leds</param> + private static void DoLedsAction(TuxAPI_LEVEL level, TuxAPI_ACTION action, TuxAPI_LEDS leds, TuxAPI_LEDS_INTENSITY_LEVEL intensity) + { + wc = new WebClient(); + string final_uri = string.Empty; + + final_uri = "http://" + TuxAPI_Host + ":" + TuxAPI_Port + "/" + (int)level + "/"; + + + #region Quel action effecteur ? ouvrir/fermer + switch (action) + { + case TuxAPI_ACTION.LEDS_OFF: + { + final_uri = final_uri + "leds/off?leds=" + leds; + } + break; + case TuxAPI_ACTION.LEDS_ON: + { + final_uri = final_uri + "leds/on?leds=" + leds + "&intensity="+((double)intensity+0.1).ToString().Replace(",","."); + } + break; + } + #endregion + + wc.DownloadString(final_uri); + } + + /// <summary> + /// Leds actions with real intensity control + /// </summary> + /// <param name="level">Access Level</param> + /// <param name="action">Open or Close</param> + /// <param name="leds">What eye ? left or right or both ?</param> + /// <param name="intensity">Intensity of leds</param> + private static void DoLedsAction(TuxAPI_LEVEL level, TuxAPI_ACTION action, TuxAPI_LEDS leds, double intensity) + { + wc = new WebClient(); + string final_uri = string.Empty; + + + final_uri = "http://" + TuxAPI_Host + ":" + TuxAPI_Port + "/" + (int)level + "/"; + + #region Quel action effecteur ? ouvrir/fermer + switch (action) + { + case TuxAPI_ACTION.LEDS_OFF: + { + final_uri = final_uri + "leds/off?leds=" + leds; + } + break; + case TuxAPI_ACTION.LEDS_ON: + { + final_uri = final_uri + "leds/on?leds=" + leds + "&intensity=" + (intensity + 0.1).ToString().Replace(",", "."); + } + break; + } + #endregion + + wc.DownloadString(final_uri); + } + + /// <summary> + /// Blinky leds + /// </summary> + /// <param name="level">Access Level</param> + /// <param name="leds">What eye ? left or right or both ?</param> + /// <param name="count">How many blink ?</param> + private static void DoBlinkLedsAction(TuxAPI_LEVEL level, TuxAPI_LEDS leds, int count) + { + wc = new WebClient(); + string final_uri = string.Empty; + final_uri = "http://" + TuxAPI_Host + ":" + TuxAPI_Port + "/" + (int)level + "/leds/blink?count=" + count + "&delay=0.1&leds=" + leds; + wc.DownloadString(final_uri); + } + + /// <summary> + /// Blinky leds + /// </summary> + /// <param name="level">Access Level</param> + /// <param name="leds">What eye ? left or right or both ?</param> + /// <param name="count">How many blink ?</param> + /// <param name="delay">Delay between 2 blink (in second (?))</param> + private static void DoBlinkLedsAction(TuxAPI_LEVEL level, TuxAPI_LEDS leds, int count, double delay) + { + wc = new WebClient(); + string final_uri = string.Empty; + final_uri = "http://" + TuxAPI_Host + ":" + TuxAPI_Port + "/" + (int)level + "/leds/blink?count=" + count + "&delay=" + delay.ToString().Replace(",", ".") + "&leds=" + leds; + wc.DownloadString(final_uri); + } + #endregion + + #region TTS SPEECH CONTROL + /// <summary> + /// Allow to use the TTS Speech + /// </summary> + /// <param name="level">Access Level</param> + /// <param name="Text">Text to read</param> + private static void DoSpeak(TuxAPI_LEVEL level, string Text) + { + wc = new WebClient(); + string final_uri = string.Empty; + + //http://localhost:270/0/flippers/up?0 //permet de faire mettre les ailles en haut ! + + final_uri = "http://" + TuxAPI_Host + ":" + TuxAPI_Port + "/" + (int)level + "/tts/speak?text=" + Text; + + wc.DownloadString(final_uri); + } + + /// <summary> + /// Allow to use the TTS Speech with locutor choose + /// </summary> + /// <param name="level">Access Level</param> + /// <param name="locutor">Locutor from enum</param> + /// <param name="Text">Text to read</param> + private static void DoSpeak(TuxAPI_LEVEL level, TuxAPI_SPEAK_LOCUTOR locutor, string Text) + { + wc = new WebClient(); + string start_uri = string.Empty; + string final_url = string.Empty; + + start_uri = "http://" + TuxAPI_Host + ":" + TuxAPI_Port + "/" + (int)level + "/tts/"; + + //1 - locutor choice + //http://127.0.0.1:270/0/tts/locutor?name=Bruno + final_url = start_uri + "locutor?name=" + (byte)locutor; + wc.DownloadString(final_url); + + //2 - the text + final_url = start_uri + "speak?text=" + Text; + + wc.DownloadString(final_url); + } + + /// <summary> + /// Allow to use the TTS Speech with pitch modification + /// </summary> + /// <param name="level">Access Level</param> + /// <param name="pitch">pitch value 50 to 200</param> + /// <param name="Text">Text to read</param> + private static void DoSpeak(TuxAPI_LEVEL level, int pitch, string Text) + { + wc = new WebClient(); + string start_uri = string.Empty; + string final_url = string.Empty; + + start_uri = "http://" + TuxAPI_Host + ":" + TuxAPI_Port + "/" + (int)level + "/tts/"; + + //1 - pitch + //http://127.0.0.1:270/0/tts/pitch?value=10 + final_url = start_uri + "pitch?value=" + pitch; + wc.DownloadString(final_url); + + //2 - text + final_url = start_uri + "speak?text=" + Text; + + wc.DownloadString(final_url); + } + + /// <summary> + /// Allow to use the TTS Speech with locutor choosse and pitch modification + /// </summary> + /// <param name="level">Access Level</param> + /// <param name="locutor">Locutor from enum</param> + /// <param name="pitch">pitch value 50 to 200</param> + /// <param name="Text">Text to read</param> + private static void DoSpeak(TuxAPI_LEVEL level, TuxAPI_SPEAK_LOCUTOR locutor, int pitch, string Text) + { + wc = new WebClient(); + string start_uri = string.Empty; + string final_url = string.Empty; + + start_uri = "http://" + TuxAPI_Host + ":" + TuxAPI_Port + "/" + (int)level + "/tts/"; + + //1 - l'interlocuteur + //http://127.0.0.1:270/0/tts/locutor?name=Bruno + final_url = start_uri + "locutor?name=" + (byte)locutor; + wc.DownloadString(final_url); + + //2 - Le pitch + //http://127.0.0.1:270/0/tts/pitch?value=10 + final_url = start_uri + "pitch?value=" + pitch; + wc.DownloadString(final_url); + + //3 - le texte + final_url = start_uri + "speak?text=" + Text; + + wc.DownloadString(final_url); + } + #endregion + + #region ATTITUNES CONTROL + /// <summary> + /// Allow to play and stop attitune + /// </summary> + /// <param name="level">Access Level</param> + /// <param name="action">Action todo Play / Stop</param> + /// <param name="attitune_path">Attitune to load and play</param> + private static void AttituneControl(TuxAPI_LEVEL level, TuxAPI_ACTION action, string attitune) + { + wc = new WebClient(); + string final_uri = string.Empty; + string final_url = string.Empty; + + + final_uri = "http://" + TuxAPI_Host + ":" + TuxAPI_Port + "/" + (int)level + "/attitune/"; + + switch (action) + { + case TuxAPI_ACTION.ATTITUNE_PLAY: //Need to fix: the attitune stopping before the end !! + { + //attitune/load_and_play? + final_url = final_uri + "load_and_play?path=" + attitune; + final_url = final_url.Replace("\\", "\\\\"); + wc.DownloadString(final_url); + } + break; + case TuxAPI_ACTION.ATTITUNE_STOP: + { + final_url = final_uri + "stop?"; + wc.DownloadString(final_url); + } + break; + } + } + #endregion + + #region WAV CONTROL + /// <summary> + /// Allow to play and stop wav sound + /// </summary> + /// <param name="level">Access Level</param> + /// <param name="action">Action todo: Play / Stop</param> + /// <param name="sound">Sound to play</param> + private static void WavControl(TuxAPI_LEVEL level, TuxAPI_ACTION action, string sound) + { + wc = new WebClient(); + string final_uri = string.Empty; + string final_url = string.Empty; + + + //http://localhost:270/0/flippers/up?0 //permet de faire mettre les ailles en haut ! + + + final_uri = "http://" + TuxAPI_Host + ":" + TuxAPI_Port + "/" + (int)level + "/wav/"; + + //http://127.0.0.1:270/0/wav/play?path=C:\Documents%20and%20Settings\Joe\Visual%20Studio%202008\Projects\TuxAPIDemo\TuxAPIDemo\bin\Debug\tux.wav&begin=0.0&end=100.0 + + switch (action) + { + case TuxAPI_ACTION.WAV_PLAY: + { + final_url = final_uri + "play?path=" + sound + "&begin=0.0&end=20000.0"; //TODO: Fix the end value + final_url = final_url.Replace("\\", "\\\\"); + wc.DownloadString(final_url); + } + break; + case TuxAPI_ACTION.WAV_STOP: + { + final_url = final_uri + "stop?"; + wc.DownloadString(final_url); + } + break; + } + } + #endregion + + #endregion + + #region "STANDARD" API FUNCTIONS TO CALL + + #region TTS Speak + public static void Speak(string Text) + { + DoSpeak(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, Text); + } + public static void Speak(TuxAPI_SPEAK_LOCUTOR locutor, string Text) + { + DoSpeak(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, locutor, Text); + } + + public static void Speak(int pitch, string Text) + { + DoSpeak(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, pitch, Text); + } + + public static void Speak(TuxAPI_SPEAK_LOCUTOR locutor, int pitch, string Text) + { + DoSpeak(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, locutor, pitch, Text); + } + #endregion + + #region Flippers actions + /// <summary> + /// Fait lever les ailles de Tux + /// </summary> + public static void Flippers_Up() + { + DoMotorAction(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, TuxAPI_ACTION.FLIPPERS_UP); + } + + /// <summary> + /// Fait baisser les ailles de Tux + /// </summary> + public static void Flippers_Down() + { + DoMotorAction(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, TuxAPI_ACTION.FLIPPERS_DOWN); + } + #endregion + + #region Eyes actions + /// <summary> + /// Fait ouvrir les yeux à Tux + /// </summary> + public static void Eyes_Open() + { + DoMotorAction(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, TuxAPI_ACTION.EYES_OPEN); + } + + /// <summary> + /// Fait fermer les yeux à Tux + /// </summary> + public static void Eyes_Close() + { + DoMotorAction(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, TuxAPI_ACTION.EYES_CLOSE); + } + #endregion + + #region Mouth actions + /// <summary> + /// Faire ouvrir sont bec à Tux + /// </summary> + public static void Mouth_Open() + { + DoMotorAction(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, TuxAPI_ACTION.MOUTH_OPEN); + } + + /// <summary> + /// Fait fermer sont bec à Tux + /// </summary> + public static void Mouth_Close() + { + DoMotorAction(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, TuxAPI_ACTION.MOUTH_CLOSE); + } + #endregion + + #region Leds On/Off + /// <summary> + /// Allume les yeux de Tux + /// </summary> + public static void Leds_On() + { + DoLedsAction(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, TuxAPI_ACTION.LEDS_ON, TuxAPI_LEDS.LED_BOTH); + } + public static void Leds_On(TuxAPI_LEDS leds) + { + DoLedsAction(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, TuxAPI_ACTION.LEDS_ON, leds); + } + public static void Leds_On(TuxAPI_LEDS_INTENSITY_LEVEL intensity) + { + DoLedsAction(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, TuxAPI_ACTION.LEDS_ON, TuxAPI_LEDS.LED_BOTH, intensity); + } + public static void Leds_On(TuxAPI_LEDS leds, TuxAPI_LEDS_INTENSITY_LEVEL intensity) + { + DoLedsAction(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, TuxAPI_ACTION.LEDS_ON, leds, intensity); + } + public static void Leds_On(TuxAPI_LEDS leds, double intensity) + { + DoLedsAction(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, TuxAPI_ACTION.LEDS_ON, leds, intensity); + } + + /// <summary> + /// Eteint les yeux de Tux + /// </summary> + public static void Leds_Off() + { + DoLedsAction(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, TuxAPI_ACTION.LEDS_OFF, TuxAPI_LEDS.LED_BOTH); + } + + public static void Leds_Off(TuxAPI_LEDS leds) + { + DoLedsAction(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, TuxAPI_ACTION.LEDS_OFF, leds); + } + + + public static void Leds_Blink() + { + DoBlinkLedsAction(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, TuxAPI_LEDS.LED_BOTH, 1); + } + + public static void Leds_Blink(TuxAPI_LEDS leds) + { + DoBlinkLedsAction(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, leds, 1); + } + + public static void Leds_Blink(TuxAPI_LEDS leds, int count) + { + DoBlinkLedsAction(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, leds, count); + } + + public static void Leds_Blink(TuxAPI_LEDS leds, int count, double delay) + { + DoBlinkLedsAction(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, leds, count, delay); + } + + #endregion + + #region Rotation + /// <summary> + /// Permet de faire tourner Tux sur la gauche + /// </summary> + /// <param name="rotation">Nombre de rotation</param> + public static void Rotation_Left(int rotation) + { + DoRotorAction(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, TuxAPI_ACTION.ROTATE_LEFT, rotation); + } + + /// <summary> + /// Permet de faire tourner Tux sur la droite + /// </summary> + /// <param name="rotation"></param> + public static void Rotation_Right(int rotation) + { + DoRotorAction(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, TuxAPI_ACTION.ROTATE_RIGHT, rotation); + } + #endregion + + #region Attitune + /// <summary> + /// Play attitune + /// </summary> + /// <param name="attitune">the attitune to play</param> + public static void PlayAttitune(string attitune) + { + AttituneControl(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, TuxAPI_ACTION.ATTITUNE_PLAY, attitune); + } + + /// <summary> + /// Stop current playing attitune + /// </summary> + public static void StopAttitune() + { + AttituneControl(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, TuxAPI_ACTION.ATTITUNE_STOP, ""); + } + #endregion + + #region Wav Sound + public static void PlayWav(string sound) + { + WavControl(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, TuxAPI_ACTION.WAV_PLAY, sound); + } + + public static void StopWav() + { + WavControl(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, TuxAPI_ACTION.WAV_STOP, ""); + } + #endregion + + #endregion + + #region SPECIAL STATUS: + private static string getRawStatus(TuxAPI_LEVEL level, TuxAPI_STATUS_REQUESTED status) + { + wc = new WebClient(); + + string status_name = string.Empty; + + switch (status) + { + #region Flippers + case TuxAPI_STATUS_REQUESTED.flippers_motor_on: status_name = "flippers_motor_on"; + break; + case TuxAPI_STATUS_REQUESTED.flippers_position: status_name = "flippers_position"; + break; + case TuxAPI_STATUS_REQUESTED.flippers_remaining_movements: status_name = "flippers_remaining_movements"; + break; + #endregion + + #region Eyes + case TuxAPI_STATUS_REQUESTED.eyes_motor_on: status_name = "eyes_motor_on"; + break; + case TuxAPI_STATUS_REQUESTED.eyes_position: status_name = "eyes_position"; + break; + case TuxAPI_STATUS_REQUESTED.eyes_remaining_movements: status_name = "eyes_remaining_movements"; + break; + #endregion + + #region Mouth + case TuxAPI_STATUS_REQUESTED.mouth_motor_on: status_name = "mouth_motor_on"; + break; + case TuxAPI_STATUS_REQUESTED.mouth_position: status_name = "mouth_position"; + break; + case TuxAPI_STATUS_REQUESTED.mouth_remaining_movements: status_name = "mouth_remaining_movements"; + break; + #endregion + + #region Spin + case TuxAPI_STATUS_REQUESTED.spin_left_motor_on: status_name = "spin_left_motor_on"; + break; + case TuxAPI_STATUS_REQUESTED.spin_right_motor_on: status_name = "spin_right_motor_on"; + break; + case TuxAPI_STATUS_REQUESTED.spinning_direction: status_name = "spinning_direction"; + break; + case TuxAPI_STATUS_REQUESTED.spinning_remaining_movements: status_name = "spinning_remaining_movements"; + break; + #endregion + + #region Leds + case TuxAPI_STATUS_REQUESTED.right_led_state: status_name = "right_led_state"; + break; + case TuxAPI_STATUS_REQUESTED.left_led_state: status_name = "left_led_state"; + break; + #endregion + + + case TuxAPI_STATUS_REQUESTED.light_level: status_name = "light_level"; + break; + case TuxAPI_STATUS_REQUESTED.battery_state: status_name = "battery_state"; + break; + case TuxAPI_STATUS_REQUESTED.battery_level: status_name = "battery_level"; + break; + case TuxAPI_STATUS_REQUESTED.charger_state: status_name = "charger_state"; + break; + } + + + string data_raw = wc.DownloadString("http://" + TuxAPI_Host + ":" + TuxAPI_Port + "/" + (int)level + "/status/request_one?status_name="+status_name); + + string[] sp = data_raw.Split('>'); + + string data = sp[10].Replace("</value", "").Trim(); + + + return data; + } + + public static string getStatus(TuxAPI_STATUS_REQUESTED status) + { + return getRawStatus(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, status); + } + + + //==================== GESTION DES EVENEMENT ======================= + //=== TEST === + + public delegate void leftWingActive(); + + + #endregion + + #region special buttons + private static string getRawButtonStatus(TuxAPI_LEVEL level, TuxAPI_BUTTON_REQUESTED button) + { + wc = new WebClient(); + string status_name = string.Empty; + + switch (button) + { + case TuxAPI_BUTTON_REQUESTED.head_button: status_name = "head_button"; + break; + case TuxAPI_BUTTON_REQUESTED.left_wing_button: status_name = "left_wing_button"; + break; + case TuxAPI_BUTTON_REQUESTED.right_wing_button: status_name = "right_wing_button"; + break; + } + + string data_raw = wc.DownloadString("http://" + TuxAPI_Host + ":" + TuxAPI_Port + "/" + (int)level + "/status/request_one?status_name=" + status_name); + string[] sp = data_raw.Split('>'); + string data = sp[10].Replace("</value", "").Trim(); + + return data; + } + + public static bool getButtonStatus(TuxAPI_BUTTON_REQUESTED button) + { + string state = getRawButtonStatus(TuxAPI_LEVEL.CLIENT_LEVEL_FREE, button); + + if (state == "False") + return false; + if (state == "True") + return true; + + return false; + } + #endregion + } + + + + //============= GESTION DES BOUTONS ============== + + /// <summary> + /// Event Manager for the 3 buttons of Tux Droid + /// </summary> + public class TuxButtonEventMgr + { + //on défini une délégation + public delegate void HeadButtonPressedEventHandler(object sender, TuxButtonEventArgs e); + public delegate void LeftButtonPressedEventHandler(object sender, TuxButtonEventArgs e); + public delegate void RightButtonPressedEventHandler(object sender, TuxButtonEventArgs e); + + //on créer l'événement + public event HeadButtonPressedEventHandler OnHeadButtonPressed; + public event LeftButtonPressedEventHandler OnLeftButtonPressed; + public event RightButtonPressedEventHandler OnRightButtonPressed; + + /// <summary> + /// Timer for checking the buttons status + /// </summary> + System.Windows.Forms.Timer t1 = new System.Windows.Forms.Timer(); + + /// <summary> + /// Start the buttons's event manager + /// </summary> + public void Start() + { + t1.Interval = 500; //500 like a good value + t1.Enabled = true; //active timer + t1.Tick += new EventHandler(t1_Tick); //tick + } + + /// <summary> + /// Function called when timer Tick + /// </summary> + /// <param name="sender"></param> + /// <param name="e"></param> + void t1_Tick(object sender, EventArgs e) + { + TuxButtonEventArgs b1 = new TuxButtonEventArgs(); //head + TuxButtonEventArgs b2 = new TuxButtonEventArgs(); //left + TuxButtonEventArgs b3 = new TuxButtonEventArgs(); //right + + //head + if (b1 != null && OnHeadButtonPressed != null) + { + b1.buttonPressed = TuxAPI.getButtonStatus(TuxAPI.TuxAPI_BUTTON_REQUESTED.head_button); + OnHeadButtonPressed(this, b1); + } + + //left + if (b2 != null && OnLeftButtonPressed != null) + { + b2.buttonPressed = TuxAPI.getButtonStatus(TuxAPI.TuxAPI_BUTTON_REQUESTED.left_wing_button); + OnLeftButtonPressed(this, b2); + } + + //right + if (b3 != null && OnRightButtonPressed != null) + { + b3.buttonPressed = TuxAPI.getButtonStatus(TuxAPI.TuxAPI_BUTTON_REQUESTED.right_wing_button); + OnRightButtonPressed(this, b3); + } + } + + //constructeur + public TuxButtonEventMgr() { } + } + + /// <summary> + /// Permet de connaitre ou de donner l'état d'un bouton + /// </summary> + public class TuxButtonEventArgs : EventArgs + { + private bool m_buttonPressed; + public bool buttonPressed + { + get { return m_buttonPressed; } + set { m_buttonPressed = value; } + } + } + + + + //========== GESTION DES MODIFICATION DATE/TIME ======== + + //ajouter la gestion heure et chaque element séparé + + public class TuxDateTimeEventMgr + { + private string old_day { get; set; } + private string old_month { get; set; } + private string old_year { get; set; } + private string old_hour { get; set; } + private string old_min { get; set; } + private string old_sec { get; set; } + + //on défini une délégation + public delegate void DayChangeEventHandler(object sender, TuxDateTimeEventArgs e); + public delegate void MonthChangeEventHandler(object sender, TuxDateTimeEventArgs e); + public delegate void YearChangeEventHandler(object sender, TuxDateTimeEventArgs e); + + public delegate void HourChangeEventHandler(object sender, TuxDateTimeEventArgs e); + public delegate void MinutesChangeEventHandler(object sender, TuxDateTimeEventArgs e); + public delegate void SecondsChangeEventHandler(object sender, TuxDateTimeEventArgs e); + + //on créer l'événement + public event DayChangeEventHandler OnDayChange; + public event MonthChangeEventHandler OnMonthChange; + public event YearChangeEventHandler OnYearChange; + + public event HourChangeEventHandler OnHourChange; + public event MinutesChangeEventHandler OnMinutesChange; + public event SecondsChangeEventHandler OnSecondsChange; + + + /// <summary> + /// Timer for checking the buttons status + /// </summary> + System.Windows.Forms.Timer t1 = new System.Windows.Forms.Timer(); + + /// <summary> + /// Start the buttons's event manager + /// </summary> + public void Start() + { + old_day = DateTime.Now.Day.ToString(); + old_month = DateTime.Now.Month.ToString(); + old_year = DateTime.Now.Year.ToString(); + + old_hour = DateTime.Now.Hour.ToString(); + old_min = DateTime.Now.Minute.ToString(); + old_sec = DateTime.Now.Second.ToString(); + + + t1.Interval = 500; //set good value + t1.Enabled = true; //active timer + t1.Tick += new EventHandler(t1_Tick); //tick + } + + /// <summary> + /// Function called when timer Tick + /// </summary> + /// <param name="sender"></param> + /// <param name="e"></param> + void t1_Tick(object sender, EventArgs e) + { + + //TuxButtonEventArgs e = new TuxButtonEventArgs(); + TuxDateTimeEventArgs DayEventArgs = new TuxDateTimeEventArgs(); + TuxDateTimeEventArgs MonthEventArgs = new TuxDateTimeEventArgs(); + TuxDateTimeEventArgs YearEventArgs = new TuxDateTimeEventArgs(); + + TuxDateTimeEventArgs HourEventArgs = new TuxDateTimeEventArgs(); + TuxDateTimeEventArgs MinutesEventArgs = new TuxDateTimeEventArgs(); + TuxDateTimeEventArgs SecondsEventArgs = new TuxDateTimeEventArgs(); + + //Ok now we check ! + string day = DateTime.Now.Day.ToString(); + string month = DateTime.Now.Month.ToString(); + string year = DateTime.Now.Year.ToString(); + + string hour = DateTime.Now.Hour.ToString(); + string min = DateTime.Now.Minute.ToString(); + string sec = DateTime.Now.Second.ToString(); + + + + if (old_day == string.Empty || old_day == "") //no data yet + old_day = day; + else + { + if (DayEventArgs != null && OnDayChange != null) + { + if (day != old_day) + { + old_day = day; + DayEventArgs.DateTimeHaveChanged = true; + OnDayChange(this, DayEventArgs); + } + else + { + DayEventArgs.DateTimeHaveChanged = false; + OnDayChange(this, DayEventArgs); + } + } + } + + if (old_month == string.Empty || old_month == "") //no data yet + old_month = month; + else + { + if (MonthEventArgs != null && OnMonthChange != null) + { + if (month != old_month) + { + old_month = month; + MonthEventArgs.DateTimeHaveChanged = true; + OnMonthChange(this, MonthEventArgs); + } + else + { + MonthEventArgs.DateTimeHaveChanged = false; + OnMonthChange(this, MonthEventArgs); + } + } + } + + if (old_year == string.Empty || old_year == "") + old_year = year; + else + { + if (YearEventArgs != null && OnYearChange != null) + { + if (year != old_year) + { + old_year = year; + YearEventArgs.DateTimeHaveChanged = true; + OnYearChange(this, YearEventArgs); + } + else + { + YearEventArgs.DateTimeHaveChanged = false; + OnYearChange(this, YearEventArgs); + } + } + } + + if (old_hour == string.Empty || old_hour == "") + old_hour = hour; + else + { + if (HourEventArgs != null && OnHourChange != null) + { + if (hour != old_hour) + { + old_hour = hour; + HourEventArgs.DateTimeHaveChanged = true; + OnHourChange(this, HourEventArgs); + } + else + { + if (HourEventArgs.DateTimeHaveChanged) + { + HourEventArgs.DateTimeHaveChanged = false; + OnHourChange(this, HourEventArgs); + } + } + } + } + + if (old_min == string.Empty || old_min == "") + old_min = min; + else + { + if (MinutesEventArgs != null && OnMinutesChange != null) + { + if (min != old_min) + { + old_min = min; + MinutesEventArgs.DateTimeHaveChanged = true; + OnMinutesChange(this, MinutesEventArgs); + } + else + { + if (MinutesEventArgs.DateTimeHaveChanged) + { + MinutesEventArgs.DateTimeHaveChanged = false; + OnMinutesChange(this, MinutesEventArgs); + } + } + } + } + + if (old_sec == string.Empty || old_sec == "") + old_sec = sec; + else + { + if (SecondsEventArgs != null && OnSecondsChange != null) + { + if (sec != old_sec) + { + old_sec = sec; + SecondsEventArgs.DateTimeHaveChanged = true; + OnSecondsChange(this, SecondsEventArgs); + } + else + { + SecondsEventArgs.DateTimeHaveChanged = false; + OnSecondsChange(this, SecondsEventArgs); + } + } + } + } + } + + public class TuxDateTimeEventArgs : EventArgs + { + private bool m_DateTimeHaveChanged; + public bool DateTimeHaveChanged + { + get { return m_DateTimeHaveChanged; } + set { m_DateTimeHaveChanged = value; } + } + } + +} Added: software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/_tux_a_p_i_8cs.html =================================================================== --- software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/_tux_a_p_i_8cs.html (rev 0) +++ software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/_tux_a_p_i_8cs.html 2009-05-30 12:35:03 UTC (rev 4711) @@ -0,0 +1,50 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> +<title>Tux C# API: C:/Documents and Settings/Administrateur/Bureau/apidoc/TuxAPI.cs File Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.9 --> +<div class="navigation" id="top"> + <div class="tabs"> + <ul> + <li><a href="main.html"><span>Main Page</span></a></li> + <li><a href="namespaces.html"><span>Packages</span></a></li> + <li><a href="annotated.html"><span>Classes</span></a></li> + <li class="current"><a href="files.html"><span>Files</span></a></li> + </ul> + </div> + <div class="tabs"> + <ul> + <li><a href="files.html"><span>File List</span></a></li> + </ul> + </div> +</div> +<div class="contents"> +<h1>C:/Documents and Settings/Administrateur/Bureau/apidoc/TuxAPI.cs File Reference</h1> +<p> +<a href="_tux_a_p_i_8cs_source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0"> +<tr><td></td></tr> +<tr><td colspan="2"><br><h2>Classes</h2></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="class_tux_a_p_i_1_1_tux_a_p_i.html">TuxAPI.TuxAPI</a></td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="class_tux_a_p_i_1_1_tux_button_event_mgr.html">TuxAPI.TuxButtonEventMgr</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Event Manager for the 3 buttons of Tux Droid. <a href="class_tux_a_p_i_1_1_tux_button_event_mgr.html#_details">More...</a><br></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="class_tux_a_p_i_1_1_tux_button_event_args.html">TuxAPI.TuxButtonEventArgs</a></td></tr> + +<tr><td class="mdescLeft"> </td><td class="mdescRight">Permet de connaitre ou de donner l'état d'un bouton. <a href="class_tux_a_p_i_1_1_tux_button_event_args.html#_details">More...</a><br></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="class_tux_a_p_i_1_1_tux_date_time_event_mgr.html">TuxAPI.TuxDateTimeEventMgr</a></td></tr> + +<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="class_tux_a_p_i_1_1_tux_date_time_event_args.html">TuxAPI.TuxDateTimeEventArgs</a></td></tr> + +<tr><td colspan="2"><br><h2>Packages</h2></td></tr> +<tr><td class="memItemLeft" nowrap align="right" valign="top">package </td><td class="memItemRight" valign="bottom"><a class="el" href="namespace_tux_a_p_i.html">TuxAPI</a></td></tr> + +</table> +</div> +<hr size="1"><address style="text-align: right;"><small>Generated on Sat May 30 13:14:08 2009 for Tux C# API by +<a href="http://www.doxygen.org/index.html"> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address> +</body> +</html> Added: software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/_tux_a_p_i_8cs_source.html =================================================================== --- software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/_tux_a_p_i_8cs_source.html (rev 0) +++ software_suite_v3/smart-core/smart-api/csharp/trunk/API Documentation/_tux_a_p_i_8cs_source.html 2009-05-30 12:35:03 UTC (rev 4711) @@ -0,0 +1,1151 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> +<title>Tux C# API: C:/Documents and Settings/Administrateur/Bureau/apidoc/TuxAPI.cs Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +</head><body> +<!-- Generated by Doxygen 1.5.9 --> +<div class="navigation" id="top"> + <div class="tabs"> + <ul> + <li><a href="main.html"><span>Main Page</span></a></li> + <li><a href="namespaces.html"><span>Packages</span></a></li> + <li><a href="annotated.html"><span>Classes</span></a></li> + <li class="current"><a href="files.html"><span>Files</span></a></li> + </ul> + </div> + <div class="tabs"> + <ul> + <li><a href="files.html"><span>File List</span></a></li> + </ul> + </div> +<h1>C:/Documents and Settings/Administrateur/Bureau/apidoc/TuxAPI.cs</h1><a href="_tux_a_p_i_8cs.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span> +<a name="l00002"></a>00002 <span class="comment"> * C# TuxAPI</span> +<a name="l00003"></a>00003 <span class="comment"> * </span> +<a name="l00004"></a>00004 <span class="comment"> * An API written in C# for the Tux Droid</span> +<a name="l00005"></a>00005 <span class="comment"> * </span> +<a name="l00006"></a>00006 <span class="comment"> * Joel Matteotti <joel.matteotti _AT_ free _DOT_ fr></span> +<a name="l00007"></a>00007 <span class="comment"> * </span> +<a name="l00008"></a>00008 <span class="comment"> * Version 1.0.0</span> +<a name="l00009"></a>00009 <span class="comment"> * </span> +<a name="l00010"></a>00010 <span class="comment"> * =============== GPL HEADER =====================</span> +<a name="l00011"></a>00011 <span class="comment"> * This file is part of C# TuxAPI.</span> +<a name="l00012"></a>00012 <span class="comment"> *</span> +<a name="l00013"></a>00013 <span class="comment"> * C# TuxAPI is free software: you can redistribute it and/or modify</span> +<a name="l00014"></a>00014 <span class="comment"> * it under the terms of the GNU General Public License as published by</span> +<a name="l00015"></a>00015 <span class="comment"> * the Free Software Foundation, either version 3 of the License, or</span> +<a name="l00016"></a>00016 <span class="comment"> * (at your option) any later version.</span> +<a name="l00017"></a>00017 <span class="comment"> *</span> +<a name="l00018"></a>00018 <span class="comment"> * C# TuxAPI is distributed in the hope that it will be useful,</span> +<a name="l00019"></a>00019 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a name="l00021"></a>00021 <span class="comment"> * GNU General Public License for more details.</span> +<a name="l00022"></a>00022 <span class="comment"> *</span> +<a name="l00023"></a>00023 <span class="comment"> * You should have received a copy of the GNU General Public License</span> +<a name="l00024"></a>00024 <span class="comment"> * along with "C# TuxAPI". If not, see <http://www.gnu.org/licenses/>.</span> +<a name="l00025"></a>00025 <span class="comment"> * </span> +<a name="l00026"></a>00026 <span class="comment"> * ====================================================</span> +<a name="l00027"></a>00027 <span class="comment"> * </span> +<a name="l00028"></a>00028 <span cl... [truncated message content] |
|
From: ks156 <c2m...@c2...> - 2009-05-30 10:35:38
|
Author: ks156 Date: 2009-05-30 12:35:19 +0200 (Sat, 30 May 2009) New Revision: 4710 Added: software_suite_v3/smart-core/smart-api/csharp/branches/ software_suite_v3/smart-core/smart-api/csharp/tags/ software_suite_v3/smart-core/smart-api/csharp/trunk/ Log: * Created the directory structure |
|
From: ks156 <c2m...@c2...> - 2009-05-29 13:29:59
|
Author: ks156
Date: 2009-05-29 15:29:53 +0200 (Fri, 29 May 2009)
New Revision: 4709
Modified:
software_suite_v2/tuxware/installers/unix/trunk/build.sh
software_suite_v2/tuxware/installers/unix/trunk/build_deps/deb/postinst
Log:
* Fixed the libasound install
-> tested with ubuntu 9.04 32 bits
* Clean the files when the debian package is uninstalled
Modified: software_suite_v2/tuxware/installers/unix/trunk/build.sh
===================================================================
--- software_suite_v2/tuxware/installers/unix/trunk/build.sh 2009-05-29 12:42:42 UTC (rev 4708)
+++ software_suite_v2/tuxware/installers/unix/trunk/build.sh 2009-05-29 13:29:53 UTC (rev 4709)
@@ -205,14 +205,14 @@
# Include Python32
packPython32 () {
echo "-- Copying python for 32 bits "
- mkdir $MIRROR_DIR/tmp
+ mkdir -p $MIRROR_DIR/tmp
wget http://ftp.kysoh.com/apps/x86_64_compat/python2.6.2/Python32.tar.gz -O \
$MIRROR_DIR/tmp/Python32.tar.gz
}
packAlsalib32 () {
echo "-- Copying alsa-lib 1.0.20 for 32 bits "
- mkdir -p $MIRROR_DIR/usr/local/
+ mkdir -p $MIRROR_DIR/tmp
wget http://ftp.kysoh.com/apps/x86_64_compat/alsa-lib1.0.20/alsa-lib1.0.20.tar.gz -O \
$MIRROR_DIR/tmp/alsalib.tar.gz
}
@@ -386,7 +386,7 @@
echo "-- Creating server binary"
echo "#!/bin/bash" >$MIRROR_DIR/$PREFIX/$BIN_DIR/tuxhttpserver
echo "export LD_LIBRARY_PATH=/usr/local/lib" >> \
- >> $MIRROR_DIR/$PREFIX/$BIN_DIR/tuxhttpserver
+ $MIRROR_DIR/$PREFIX/$BIN_DIR/tuxhttpserver
if [ $ARCH == "amd64" ]; then
echo "/opt/Python32/bin/python2.6 $PREFIX/$SERVER_DIR/tuxhttpserver.py" >> \
$MIRROR_DIR/$PREFIX/$BIN_DIR/tuxhttpserver
@@ -439,7 +439,6 @@
if [ ! -d $MIRROR_DIR/$path ]; then
mkdir -p $MIRROR_DIR/$path
fi
- echo $url
wget -q $url -O $MIRROR_DIR/$path/$file
}
@@ -456,7 +455,6 @@
rm path
echo $line|cut -d ';' -f 4 |sed "s;\$PREFIX;\\${PREFIX};g" >url
url=`cat url`
- echo $url
rm url
if [ `echo $line|cut -d ';' -f 1` == COPY ]; then
installFromFtp
@@ -488,7 +486,6 @@
createDebianDir () {
echo "Creating debian directory"
mkdir $BUILD_DIR/DEBIAN
- echo "" >$BUILD_DIR/DEBIAN/conffiles
}
packDebInitScript () {
@@ -517,15 +514,16 @@
createPreRmDeb () {
echo "Creating pre remove script"
- echo '/etc/init.d/tuxhttpserver stop
- rm -r /opt/Python32
- rm -r /etc/tuxdroid
- for file in `find /usr/share/tuxdroid -iname "*.py[co]"`; do
- rm $file
- done
- for file in `find /usr/lib/tuxdroid -iname "*.py[co]"`; do
- rm $file
- done' > $PRERM
+ echo '#!/bin/bash
+/etc/init.d/tuxhttpserver stop
+[[ -d /opt/Python32 ]] && rm -r /opt/Python32
+for file in `find /usr/share/tuxdroid -iname "*.py[co]"`; do
+ rm $file
+done
+for file in `find /usr/lib/tuxdroid -iname "*.py[co]"`; do
+ rm $file
+done' > $PRERM
+ chmod +x $PRERM
}
@@ -534,8 +532,9 @@
sed "s;PREFIX=;PREFIX=$PREFIX;g" build_deps/deb/postinst \
>$POSTINST
if [ $ARCH == "amd64" ]; then
- echo 'tar -xvf /tmp/Python32.tar.gz -C /opt/' >> $POSTINST
+ echo 'tar -xf /tmp/Python32.tar.gz -C /opt/' >> $POSTINST
fi
+ echo 'tar -xf /tmp/alsalib.tar.gz -C /usr/local/' >> $POSTINST
chmod +x $POSTINST
}
Modified: software_suite_v2/tuxware/installers/unix/trunk/build_deps/deb/postinst
===================================================================
--- software_suite_v2/tuxware/installers/unix/trunk/build_deps/deb/postinst 2009-05-29 12:42:42 UTC (rev 4708)
+++ software_suite_v2/tuxware/installers/unix/trunk/build_deps/deb/postinst 2009-05-29 13:29:53 UTC (rev 4709)
@@ -3,6 +3,7 @@
cd $PREFIX/lib/tuxdroid/python-api
python setup.py install >/dev/null
+rm -r build
cd - >/dev/null
chmod +x $PREFIX/bin/*
update-rc.d tuxhttpserver defaults >/dev/null
|
|
From: remi <c2m...@c2...> - 2009-05-29 13:10:07
|
Author: remi
Date: 2009-05-29 14:14:49 +0200 (Fri, 29 May 2009)
New Revision: 4704
Modified:
software_suite_v3/smart-core/smart-server/trunk/resources/00_smart_server_base/00_resourceServer.py
Log:
* updated restart command for Windows
Modified: software_suite_v3/smart-core/smart-server/trunk/resources/00_smart_server_base/00_resourceServer.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/resources/00_smart_server_base/00_resourceServer.py 2009-05-29 12:10:24 UTC (rev 4703)
+++ software_suite_v3/smart-core/smart-server/trunk/resources/00_smart_server_base/00_resourceServer.py 2009-05-29 12:14:49 UTC (rev 4704)
@@ -51,7 +51,7 @@
# TODO: Restart on linux
if os.name == 'nt':
t = threading.Thread(target = os.system,
- args = ["tuxhttpserver_restart.exe",])
+ args = ["smart_server_restart.exe",])
t.start()
# --------------------------------------------------------------------------
|
|
From: remi <c2m...@c2...> - 2009-05-29 13:10:02
|
Author: remi
Date: 2009-05-29 14:16:25 +0200 (Fri, 29 May 2009)
New Revision: 4705
Modified:
software_suite_v3/smart-core/smart-server/trunk/installer.nsi
Log:
* updated installer nsi script
Modified: software_suite_v3/smart-core/smart-server/trunk/installer.nsi
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/installer.nsi 2009-05-29 12:14:49 UTC (rev 4704)
+++ software_suite_v3/smart-core/smart-server/trunk/installer.nsi 2009-05-29 12:16:25 UTC (rev 4705)
@@ -7,8 +7,8 @@
!define PRODUCT_VERSION "0.4.0"
; Output names
-!define FINAL_INSTALLER_EXE "tuxHTTPServerInstaller_${PRODUCT_VERSION}.exe"
-!define UNINSTALLER_EXE "tuxHTTPServerUninstaller.exe"
+!define FINAL_INSTALLER_EXE "SmartServerInstaller.exe"
+!define UNINSTALLER_EXE "SmartServerUninstaller.exe"
; The name of the installer
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
@@ -27,17 +27,33 @@
var /GLOBAL UNINSTALLERS_SUB_PATH
; -----------------------------------------------------------------------------
-; Section ""
+; Section Pre-installation
; -----------------------------------------------------------------------------
+Section -Pre
+!ifndef INNER
+ ; Needed
+ SectionIn RO
+ ; Get the Tuxdroid installation path
+ ReadRegStr $TUXDROID_PATH HKLM "SOFTWARE\Tux Droid\Installation" "Install_Dir"
+ ; Uninstall old installations of Smart-Server
+ DetailPrint "Uninstalling old versions"
+ SetDetailsPrint none
+ ExecWait '"$TUXDROID_PATH\uninstallers\sub\${UNINSTALLER_EXE}" /S _?=$TUXDROID_PATH\uninstallers'
+ SetDetailsPrint textonly
+!endif
+SectionEnd
+; -----------------------------------------------------------------------------
+; Section ""
+; -----------------------------------------------------------------------------
Section ""
; Get the Tuxdroid installation paths
- ReadRegStr $TUXDROID_PATH HKLM "SOFTWARE\Tuxdroid\TuxdroidSetup" "Install_Dir"
+ ReadRegStr $TUXDROID_PATH HKLM "SOFTWARE\Tux Droid\Installation" "Install_Dir"
StrCpy $UNINSTALLERS_SUB_PATH "$TUXDROID_PATH\uninstallers\sub"
-
+
; Write the files
- CreateDirectory "$TUXDROID_PATH\softwares\tuxhttpserver"
- SetOutPath "$TUXDROID_PATH\softwares\tuxhttpserver"
+ CreateDirectory "$TUXDROID_PATH\softwares\smart-server"
+ SetOutPath "$TUXDROID_PATH\softwares\smart-server"
File COPYING
File tuxhttpserver.py
File version.py
@@ -51,42 +67,37 @@
File TDSResourcesManager.py
File TDSService.py
File TuxDroidServer.py
-
- CreateDirectory "$TUXDROID_PATH\softwares\tuxhttpserver\data"
- SetOutPath "$TUXDROID_PATH\softwares\tuxhttpserver\data"
+
+ CreateDirectory "$TUXDROID_PATH\softwares\smart-server\data"
+ SetOutPath "$TUXDROID_PATH\softwares\smart-server\data"
File /r data\*
-
- RMDir /r "$TUXDROID_PATH\softwares\tuxhttpserver\resources"
- CreateDirectory "$TUXDROID_PATH\softwares\tuxhttpserver\resources"
- SetOutPath "$TUXDROID_PATH\softwares\tuxhttpserver\resources"
+
+ CreateDirectory "$TUXDROID_PATH\softwares\smart-server\resources"
+ SetOutPath "$TUXDROID_PATH\softwares\smart-server\resources"
File /r resources\*
-
- CreateDirectory "$TUXDROID_PATH\softwares\tuxhttpserver\util"
- SetOutPath "$TUXDROID_PATH\softwares\tuxhttpserver\util"
+
+ CreateDirectory "$TUXDROID_PATH\softwares\smart-server\util"
+ SetOutPath "$TUXDROID_PATH\softwares\smart-server\util"
File /r util\*
-
- CreateDirectory "$TUXDROID_PATH\softwares\tuxhttpserver\content"
- SetOutPath "$TUXDROID_PATH\softwares\tuxhttpserver\content"
- File /r content\*
-
+
SetOutPath "$TUXDROID_PATH\bin"
- File delphi_launchers\tuxhttpserver_start.exe
- File delphi_launchers\tuxhttpserver_stop.exe
- File delphi_launchers\tuxhttpserver_restart.exe
-
- CreateDirectory "$TUXDROID_PATH\resources\misc"
- SetOutPath "$TUXDROID_PATH\resources\misc"
+ File delphi_launchers\smart_server_start.exe
+ File delphi_launchers\smart_server_stop.exe
+ File delphi_launchers\smart_server_restart.exe
+
+ CreateDirectory "$TUXDROID_PATH\resources\images"
+ SetOutPath "$TUXDROID_PATH\resources\images"
File tuxsys.ico
-
+
; Write shortcut in start menu
CreateDirectory "$SMPROGRAMS\Tux Droid"
- CreateDirectory "$SMPROGRAMS\Tux Droid\Tuxware"
- CreateDirectory "$SMPROGRAMS\Tux Droid\Tuxware\HTTPServer"
- CreateShortCut "$SMPROGRAMS\Tux Droid\Tuxware\HTTPServer\Start.lnk" "$TUXDROID_PATH\bin\tuxhttpserver_start.exe" "" "$TUXDROID_PATH\resources\misc\tuxsys.ico" 0
- CreateShortCut "$SMPROGRAMS\Tux Droid\Tuxware\HTTPServer\Stop.lnk" "$TUXDROID_PATH\bin\tuxhttpserver_stop.exe" "" "$TUXDROID_PATH\resources\misc\tuxsys.ico" 0
- CreateShortCut "$SMPROGRAMS\Tux Droid\Tuxware\HTTPServer\Restart.lnk" "$TUXDROID_PATH\bin\tuxhttpserver_restart.exe" "" "$TUXDROID_PATH\resources\misc\tuxsys.ico" 0
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Run" "TuxHTTPServer" "$TUXDROID_PATH\bin\tuxhttpserver_start.exe"
-
+ CreateDirectory "$SMPROGRAMS\Tux Droid\Smart-Core"
+ CreateDirectory "$SMPROGRAMS\Tux Droid\Smart-Core\Smart-Server"
+ CreateShortCut "$SMPROGRAMS\Tux Droid\Smart-Core\Smart-Server\Start.lnk" "$TUXDROID_PATH\bin\smart_server_start.exe" "" "$TUXDROID_PATH\resources\images\tuxsys.ico" 0
+ CreateShortCut "$SMPROGRAMS\Tux Droid\Smart-Core\Smart-Server\Stop.lnk" "$TUXDROID_PATH\bin\smart_server_stop.exe" "" "$TUXDROID_PATH\resources\images\tuxsys.ico" 0
+ CreateShortCut "$SMPROGRAMS\Tux Droid\Smart-Core\Smart-Server\Restart.lnk" "$TUXDROID_PATH\bin\smart_server_restart.exe" "" "$TUXDROID_PATH\resources\images\tuxsys.ico" 0
+ WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Run" "Smart-Server" "$TUXDROID_PATH\bin\smart_server_start.exe"
+
; Write the uninstall file
WriteUninstaller "$UNINSTALLERS_SUB_PATH\${UNINSTALLER_EXE}"
Return
@@ -97,42 +108,26 @@
; -----------------------------------------------------------------------------
Section "Uninstall"
; Get the Tuxdroid installation paths
- ReadRegStr $TUXDROID_PATH HKLM "SOFTWARE\Tuxdroid\TuxdroidSetup" "Install_Dir"
+ ReadRegStr $TUXDROID_PATH HKLM "SOFTWARE\Tux Droid\Installation" "Install_Dir"
StrCpy $UNINSTALLERS_SUB_PATH "$TUXDROID_PATH\uninstallers\sub"
-
+
; Remove registry keys
- DeleteRegValue HKLM "Software\Microsoft\Windows\CurrentVersion\Run" "TuxHTTPServer"
+ DeleteRegValue HKLM "Software\Microsoft\Windows\CurrentVersion\Run" "Smart-Server"
; Remove files and uninstaller
- Delete "$TUXDROID_PATH\bin\tuxhttpserver_start.exe"
- Delete "$TUXDROID_PATH\bin\tuxhttpserver_stop.exe"
- Delete "$TUXDROID_PATH\bin\tuxhttpserver_restart.exe"
- Delete "$TUXDROID_PATH\resources\misc\tuxsys.ico"
- Delete "$TUXDROID_PATH\softwares\tuxhttpserver\COPYING"
- Delete "$TUXDROID_PATH\softwares\tuxhttpserver\tuxhttpserver.py"
- Delete "$TUXDROID_PATH\softwares\tuxhttpserver\version.py"
- Delete "$TUXDROID_PATH\softwares\tuxhttpserver\TDSAccessManager.py"
- Delete "$TUXDROID_PATH\softwares\tuxhttpserver\TDSClient.py"
- Delete "$TUXDROID_PATH\softwares\tuxhttpserver\TDSClientLevels.py"
- Delete "$TUXDROID_PATH\softwares\tuxhttpserver\TDSClientsManager.py"
- Delete "$TUXDROID_PATH\softwares\tuxhttpserver\TDSConfiguration.py"
- Delete "$TUXDROID_PATH\softwares\tuxhttpserver\TDSError.py"
- Delete "$TUXDROID_PATH\softwares\tuxhttpserver\TDSHTTPServer.py"
- Delete "$TUXDROID_PATH\softwares\tuxhttpserver\TDSResourcesManager.py"
- Delete "$TUXDROID_PATH\softwares\tuxhttpserver\TDSService.py"
- Delete "$TUXDROID_PATH\softwares\tuxhttpserver\TuxDroidServer.py"
-
- RMDir /r "$TUXDROID_PATH\softwares\tuxhttpserver\data"
- RMDir /r "$TUXDROID_PATH\softwares\tuxhttpserver\util"
- RMDir /r "$TUXDROID_PATH\softwares\tuxhttpserver\resources"
+ Delete "$TUXDROID_PATH\bin\smart_server_start.exe"
+ Delete "$TUXDROID_PATH\bin\smart_server_stop.exe"
+ Delete "$TUXDROID_PATH\bin\smart_server_restart.exe"
+ Delete "$TUXDROID_PATH\resources\images\tuxsys.ico"
+ RMDir /r "$TUXDROID_PATH\softwares\smart-server"
Delete "$UNINSTALLERS_SUB_PATH\${UNINSTALLER_EXE}"
-
+
; Remove shortcuts
- Delete "$SMPROGRAMS\Tux Droid\Tuxware\HTTPServer\Stop.lnk"
- Delete "$SMPROGRAMS\Tux Droid\Tuxware\HTTPServer\Start.lnk"
- Delete "$SMPROGRAMS\Tux Droid\Tuxware\HTTPServer\Restart.lnk"
- RMDir /r "$SMPROGRAMS\Tux Droid\Tuxware\HTTPServer"
-
+ Delete "$SMPROGRAMS\Tux Droid\Smart-Core\Smart-Server\Stop.lnk"
+ Delete "$SMPROGRAMS\Tux Droid\Smart-Core\Smart-Server\Start.lnk"
+ Delete "$SMPROGRAMS\Tux Droid\Smart-Core\Smart-Server\Restart.lnk"
+ RMDir /r "$SMPROGRAMS\Tux Droid\Smart-Core\Smart-Server"
+
; Quit the uninstaller
Quit
SectionEnd
|
|
From: ks156 <c2m...@c2...> - 2009-05-29 12:53:32
|
Author: ks156
Date: 2009-05-29 14:24:56 +0200 (Fri, 29 May 2009)
New Revision: 4706
Modified:
software_suite_v2/tuxware/installers/unix/trunk/build.sh
software_suite_v2/tuxware/installers/unix/trunk/build_deps/tar/Makefile
software_suite_v2/tuxware/installers/unix/trunk/build_deps/tar/Makefile.amd64
Log:
* Fixed the server launcher
* Fixed the alsalib problem
Modified: software_suite_v2/tuxware/installers/unix/trunk/build.sh
===================================================================
--- software_suite_v2/tuxware/installers/unix/trunk/build.sh 2009-05-29 12:16:25 UTC (rev 4705)
+++ software_suite_v2/tuxware/installers/unix/trunk/build.sh 2009-05-29 12:24:56 UTC (rev 4706)
@@ -7,6 +7,7 @@
DEBIAN_DIR=$BUILD_DIR/DEBIAN
PREINST=$DEBIAN_DIR/preinst
POSTINST=$DEBIAN_DIR/postinst
+PRERM=$DEBIAN_DIR/prerm
CONTROL=$DEBIAN_DIR/control
@@ -205,10 +206,17 @@
packPython32 () {
echo "-- Copying python for 32 bits "
mkdir $MIRROR_DIR/tmp
- wget http://ftp.kysoh.com/apps/installers/unix/python32/Python32.tar.gz -O \
+ wget http://ftp.kysoh.com/apps/x86_64_compat/python2.6.2/Python32.tar.gz -O \
$MIRROR_DIR/tmp/Python32.tar.gz
}
+packAlsalib32 () {
+ echo "-- Copying alsa-lib 1.0.20 for 32 bits "
+ mkdir -p $MIRROR_DIR/usr/local/
+ wget http://ftp.kysoh.com/apps/x86_64_compat/alsa-lib1.0.20/alsa-lib1.0.20.tar.gz -O \
+ $MIRROR_DIR/tmp/alsalib.tar.gz
+}
+
# Install the python API from SVN
packPythAPI () {
echo "-- Copying the python API"
@@ -377,6 +385,8 @@
serverBin () {
echo "-- Creating server binary"
echo "#!/bin/bash" >$MIRROR_DIR/$PREFIX/$BIN_DIR/tuxhttpserver
+ echo "export LD_LIBRARY_PATH=/usr/local/lib" >> \
+ >> $MIRROR_DIR/$PREFIX/$BIN_DIR/tuxhttpserver
if [ $ARCH == "amd64" ]; then
echo "/opt/Python32/bin/python2.6 $PREFIX/$SERVER_DIR/tuxhttpserver.py" >> \
$MIRROR_DIR/$PREFIX/$BIN_DIR/tuxhttpserver
@@ -441,10 +451,8 @@
# sed :
# I have to replace $PREFIX (ascii sequence) by the environment
# variable.
- echo $PREFIX
echo $line|cut -d ';' -f 3 |sed "s;\$PREFIX;\\${PREFIX};g" >path
path=`cat path`
- echo $path
rm path
echo $line|cut -d ';' -f 4 |sed "s;\$PREFIX;\\${PREFIX};g" >url
url=`cat url`
@@ -507,6 +515,20 @@
echo " - Tux driver" >> $CONTROL
}
+createPreRmDeb () {
+ echo "Creating pre remove script"
+ echo '/etc/init.d/tuxhttpserver stop
+ rm -r /opt/Python32
+ rm -r /etc/tuxdroid
+ for file in `find /usr/share/tuxdroid -iname "*.py[co]"`; do
+ rm $file
+ done
+ for file in `find /usr/lib/tuxdroid -iname "*.py[co]"`; do
+ rm $file
+ done' > $PRERM
+}
+
+
createPostInstFileDeb () {
echo "Creating post install script"
sed "s;PREFIX=;PREFIX=$PREFIX;g" build_deps/deb/postinst \
@@ -601,6 +623,7 @@
makeDEB () {
createDebianDir
packDebInitScript
+ createPreRmDeb
createPostInstFileDeb
createPreInstFileDeb
createControlFileDeb
@@ -620,59 +643,6 @@
rm filelist
}
-packChatterPlugin () {
- NAME="chatterTux"
- createTemp
- mkdir -p $BUILD_DIR
- mkdir -p $MIRROR_DIR
- mkdir -p $MIRROR_DIR/$PREFIX
- mkdir -p $MIRROR_DIR/$PREFIX/$SERVER_DIR
- mkdir -p $MIRROR_DIR/$PREFIX/$SERVER_DIR/resources
- mkdir -p $MIRROR_DIR/$PREFIX/$SERVER_DIR/chatterTux
- mkdir -p $MIRROR_DIR/$PREFIX/$ATTITUNES_DIR
- packChatterTux
- case $TYPE in
- deb)
- DEPS="libc6(>=2.3), python, python-pcapy, python-impacket"
- createDebianDir
- echo "-- Creating the control file"
- echo "Package: $NAME" >$CONTROL
- echo "Priority: extra" >> $CONTROL
- echo "Section: Application" >> $CONTROL
- SIZE=`du -s $BUILD_DIR |awk '{print $1}'`
- echo "Installed-Size: $SIZE" >> $CONTROL
- echo "Maintainer: KySoH <in...@ky...>" >> $CONTROL
- echo "Architecture: $ARCH" >> $CONTROL
- echo "Version: $VERSION" >> $CONTROL
- echo "Depends: $DEPS" >> $CONTROL
- echo "Description: ChatterTux resource for Tux Droid" >> $CONTROL
- echo " This package contains the ChatterTux resource for TuxDroid" >> \
- $CONTROL
- echo " - ChatterTux" >> $CONTROL
- echo " - pcapy" >> $CONTROL
- echo " - Impacket" >> $CONTROL
- cp ./build_deps/deb/resources/preinstChatterTux $PREINST
- chmod +x $PREINST
- cp ./build_deps/deb/resources/postinstChatterTux $POSTINST
- chmod +x $POSTINST
- packDebian
- ;;
- tar)
- mkdir -p $BUILD_DIR/deps
- wget -q http://oss.coresecurity.com/repo/pcapy-0.10.5.tar.gz
- tar -xvf pcapy-0.10.5.tar.gz -C $BUILD_DIR/deps
- rm pcapy-0.10.5.tar.gz
- wget -q http://oss.coresecurity.com/repo/Impacket-0.9.6.0.tar.gz
- tar -xvf Impacket-0.9.6.0.tar.gz -C $BUILD_DIR/deps
- rm Impacket-0.9.6.0.tar.gz
- sed "s;PREFIX=;PREFIX=$PREFIX;g" \
- build_deps/tar/resources/MakefileChatterTux >$BUILD_DIR/Makefile
- packTarball
- ;;
- esac
- clean
-}
-
NAME="tuxsetup"
TYPE=
VERSION=
@@ -761,6 +731,9 @@
if [ $ARCH == "amd64" ]; then
packPython32
fi
+if [ $TYPE == "deb" ] || [ $ARCH = "amd64" ]; then
+ packAlsalib32
+fi
packPythAPI
#compileDriver
packJavaAPI
@@ -791,5 +764,3 @@
;;
esac
clean
-
-packChatterPlugin
Modified: software_suite_v2/tuxware/installers/unix/trunk/build_deps/tar/Makefile
===================================================================
--- software_suite_v2/tuxware/installers/unix/trunk/build_deps/tar/Makefile 2009-05-29 12:16:25 UTC (rev 4705)
+++ software_suite_v2/tuxware/installers/unix/trunk/build_deps/tar/Makefile 2009-05-29 12:24:56 UTC (rev 4706)
@@ -34,6 +34,7 @@
rm -rf tuxisalive setup.py build
chmod 0755 $(PREFIX)/share/tuxdroid/tuxhttpserver/tuxhttpserver.py
chmod 0755 $(PREFIX)/share/tuxdroid/tux_updater/tux_updater
+ tar -xvf /tmp/alsalib.tar.gz -C /usr/local/
echo Done.
uninstall:
Modified: software_suite_v2/tuxware/installers/unix/trunk/build_deps/tar/Makefile.amd64
===================================================================
--- software_suite_v2/tuxware/installers/unix/trunk/build_deps/tar/Makefile.amd64 2009-05-29 12:16:25 UTC (rev 4705)
+++ software_suite_v2/tuxware/installers/unix/trunk/build_deps/tar/Makefile.amd64 2009-05-29 12:24:56 UTC (rev 4706)
@@ -35,6 +35,7 @@
chmod 0755 $(PREFIX)/share/tuxdroid/tuxhttpserver/tuxhttpserver.py
chmod 0755 $(PREFIX)/share/tuxdroid/tux_updater/tux_updater
tar -xvf ./mirror/Python32.tar.gz -C /opt/
+ tar -xvf /tmp/alsalib.tar.gz -C /usr/local/
echo Done.
uninstall:
|