Author: vingtetun
Date: 2009-02-02 19:59:25 +0100 (Mon, 02 Feb 2009)
New Revision: 3549
Modified:
software_suite_v2/tuxware/tuxhttpserver/trunk/src/data/js/TuxAPI.js
Log:
* Start of rewriting of the Javascript API
Modified: software_suite_v2/tuxware/tuxhttpserver/trunk/src/data/js/TuxAPI.js
===================================================================
--- software_suite_v2/tuxware/tuxhttpserver/trunk/src/data/js/TuxAPI.js
2009-02-02 09:27:45 UTC (rev 3548)
+++ software_suite_v2/tuxware/tuxhttpserver/trunk/src/data/js/TuxAPI.js
2009-02-02 18:59:25 UTC (rev 3549)
@@ -1,419 +1,1110 @@
+/**
+ *
+ * This file implements the TuxDroid API for Javascript,
+ * trying to be as closed as possible from the python one.
+ *
+ * TODO
+ * Do we really need the hashTable ? a simple object should do the job!
+ * _retrieve event should be private
+ * Rename the CommandRequest en TuxHTTPRequest
+ *
+ */
-///////////////////////////////////////////////////////////////////////////////
-// Main Class : TuxAPI
-///////////////////////////////////////////////////////////////////////////////
-/*
- * Class definition
- */
-function TuxAPI()
-{
- // Public methods and objects
- this.connect = Public_TuxAPI_connect;
- this.disconnect = Public_TuxAPI_disconnect;
- this.register_event = Public_TuxAPI_register_event;
- this.mouth = new TuxAPI_Mouth(this);
+const TUXAPI_NOT_IMPLEMENTED = "NOT_IMPLEMENTED"
+
+/*****************************************************************************
+ * Base TuxAPI Class
+ * **************************************************************************/
+function TuxAPI( aHost, aPort ){
+ if( aHost == undefined ) aHost = '127.0.0.1';
+ if( aPort == undefined ) aPort = 270;
+ var versionName = "tuxisalive";
+ var versionNumber = "0.2.1";
+
+ this.server = new TuxAPI_server(this, aHost, aPort);
+ this.event = new TuxAPI_event(this);
+ this.status = new TuxAPI_status(this);
+ this.access = new TuxAPI_access(this);
+ this.mouth = new TuxAPI_MouthEyes(this, 'mouth');
+ this.eyes = new TuxAPI_MouthEyes(this, 'eyes');
+ this.flippers = new TuxAPI_flippers(this);
+ this.leds = new TuxAPI_leds(this);
+ this.spinning = new TuxAPI_spinning(this);
+ this.radio = new TuxAPI_DongleRadio(this, 'radio');
+ this.dongle = new TuxAPI_DongleRadio(this, 'dongle');
+ this.ir = new TuxAPI_ir(this);
+ this.attitune = new TuxAPI_attitune(this);
+ this.tts = new TuxAPI_TTS(this);
+ this.soundFlash = new TuxAPI_soundFlash(this);
+ this.button = new TuxAPI_Button(this);
+ this.wav = new TuxAPI_WAV(this);
+ this.raw = new TuxAPI_RAW(this);
+
+ this.getVersion = function(){
+ return versionName + '-' + versionNumber;
+ };
+
+ this.getVersions = function(){
+ //TuxAPI.py:166
+ return TUXAPI_NOT_IMPLEMENTED;
+ };
+
+ this.getEventHandlers = function(){
+ //TuxAPI.py:203
+ return TUXAPI_NOT_IMPLEMENTED;
+ };
+
+
+ // We don't have any wait/pause/Thread.sleep function in javascript
+ // so we she do.... ugly...things...
+ // XXX Move this to event ? (have to look in the python source code )
+ this._wait = function(){
+ //Nothing actually but an awful do...while soon :'(
+ };
+
+ var _onConnect = function(self){
+ self.event.start();
+ };
+
+ var _onDisconnect = function(self){
+ self.event.stop();
+ }
+
+ //Constructor
+ function TuxAPI(self){
+ self.server.registerEventOnConnected( _onConnect );
+ self.server.registerEventOnDisconnected( _onDisconnect );
+ }
+ TuxAPI(this);
+};
+
+TuxAPI.CLIENT_LEVEL_ANONYME = 0;
+
+
+/*****************************************************************************
+ * Button Namespace
+ * **************************************************************************/
+var TuxAPI_Button = function( self ){
+ this.left = new TuxAPI_Switch( self );
+ this.right = new TuxAPI_Switch( self );
+ this.head = new TuxAPI_Switch( self );
+ this.remote = new TuxAPI_Remote( self );
+};
+
+
+/*****************************************************************************
+ * Button Switch Namespace
+ * **************************************************************************/
+var TuxAPI_Switch = function( self ){
+ this.getState = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.waitPressed = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.WaitReleased = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.registerEventOnPressed = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.unregisterEventOnPressed = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.registerEventOnReleased = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.unregisterEventOnReleased = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ }
+};
+
+
+/*****************************************************************************
+ * Button Remote Namespace
+ * **************************************************************************/
+var TuxAPI_Remote = function( self ){
+ this.getState = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.waitPressed = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.WaitReleased = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.registerEventOnPressed = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.unregisterEventOnPressed = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.registerEventOnReleased = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.unregisterEventOnReleased = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ }
+};
+
+
+
+/*****************************************************************************
+ * Access Namespace
+ * **************************************************************************/
+var TuxAPI_access = function( self ){
+ this.acquire = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.waitAcquire = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.forcingAcquire = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.release = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.forcingRelease = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.lock = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.unLock = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ }
+};
+
+
+
+
+/*****************************************************************************
+ * Attitune Namespace
+ * **************************************************************************/
+var TuxAPI_attitune = function( self ){
+ this.load = function( aPath ){
+ var rv = self.server.request( 'attitune', 'load' , { 'path':aPath } );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
+
+ this.play = function( aBegin ){
+ var rv = self.server.request( 'attitune', 'play' , { 'begin':aBegin } );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
+
+ this.stop = function(){
+ var rv = self.server.request( 'attitune', 'stop' , {} );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
+
+ this.loadAndPlay = function( aPath ){
+ this.load( aPath );
+ this.play( '1.0' );
+ }
+};
+
+
+
+
+/*****************************************************************************
+ * SoundFlash Namespace
+ * **************************************************************************/
+var TuxAPI_soundFlash = function( self ){
+ this.playAsync = function(){
+ var rv = self.server.request( 'sound_flash', 'play' , { 'track': aTrack,
'volume':aVolume } );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
+
+ this.play = function( aTrack, aVolume ){
+ if( !this.playAsync( aTrack, aVolume ) ) return false;
+ if( self.server.getClientLevel() == TuxAPI.CLIENT_LEVEL_ANONYME ) return
true;
+ self.wait();
+ return true;
+ },
+
+ this.reflash = function( someTracks ){
+ var rv = self.server.request( 'sound_flash', 'reflash' , { 'tracks':
someTracks } );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ }
+};
+
+
+
+
+/*****************************************************************************
+ * WAV Namespace
+ * **************************************************************************/
+var TuxAPI_RAW = function( self ){
+ this.send = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ }
+};
+
+
+
+
+/*****************************************************************************
+ * WAV Namespace
+ * **************************************************************************/
+var TuxAPI_WAV = function( self ){
+ this.playAsync = function( aBegin, aEnd, aPath ){
+ var rv = self.server.request( 'wav', 'play' , { 'begin':aBegin,
'end':aEnd, 'path':aPath } );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
+
+ this.play = function( aBegin, aEnd, aPath ){
+ if( !this.playAsync( aBegin, aEnd, aPath ) ) return false;
+ if( self.server.getClientLevel() == TuxAPI.CLIENT_LEVEL_ANONYME ) return
true;
+ self.wait();
+ return true;
+ },
+
+ this.stop = function(){
+ var rv = self.server.request( 'wav', 'stop' , {} );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
+
+ this.setPause = function( aValue ){
+ var rv = self.server.request( 'wav', 'pause' , { 'value': aValue } );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ }
+};
+
+
+
+/*****************************************************************************
+ * TTS Namespace
+ * **************************************************************************/
+var TuxAPI_TTS = function( self ){
+ this.isConsole = function(){
+ return false;
+ },
+
+ this.setEncoding = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.getPitch = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.setPitch = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.getLocutor = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.setLocutor = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.speakAsync = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.speakPush = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.speakFlush = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.speak = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.stop = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.setPause = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.getVoices = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.registerEventOnVoiceList = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.unregisterEventOnVoiceList = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.registerEventOnSoundOn = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.unregisterEventOnSoundOn = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.registerEventOnSoundOff = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.unregisterEventOnSoundOff = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ }
+
+};
+
+
+
+
+/*****************************************************************************
+ * Server Namespace
+ * **************************************************************************/
+var TuxAPI_server = function( self, aHost, aPort ){
+ this.autoConnect = function( aLevel, aName, aPasswd ){
+ //TuxAPIServer.py:355
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.connect = function tuxConnect( aLevel, aName, aPasswd ){
+ if (this._connected) return true;
+
+ var rv = this.request( 'client', 'create', {'level':aLevel, 'name':aName,
'passwd':aPasswd } );
+ var id_client = "-1";
+
+ if (rv.get("result") == "Success"){
+ id_client = rv.get("data0").get("client_id");
+ }
+
+ if (id_client != "-1"){
+ this._level = aLevel;
+ this._passwd = aPasswd;
+ this._connected = true;
+ this._base_url += id_client + "/";
+ if( this._onConnect )
+ this._onConnect(self);
+ return true;
+ }
- // Private methods
- this.__get_server_url = Private_TuxAPI_get_server_url;
- this.__retrieve_events = Private_TuxAPI_retrieve_events;
- this.__fill_callback_dict = Private_TuxAPI_fill_callback_dict;
-
- // Private variables
- this.__serv_url = this.__get_server_url();
- this.__base_url = this.__serv_url;
- this.__connected = false;
- this.__timer_id = null;
- this.__callback_dict = new Hashtable();
- this.__passwd = "";
-
- // Initialization
- this.__callback_dict.clear();
-}
+ return false;
+ },
-/*
- *
- */
-function Private_TuxAPI_get_server_url()
-{
- var hostname = window.location.hostname;
- var port = window.location.port;
-
- if (hostname == "")
- {
- hostname = "localhost";
+ this.waitConnected = function( aTimeout ){
+ //TuxAPIServer.py:127
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.registerEventOnConnected = function ( aFunction ){
+ this._onConnect = aFunction;
+ },
+
+ this.unregisterEventOnConnected = function (){
+ this._onConnect = null;
+ },
+
+ this.disconnect = function(){
+ if (!this._connected) return false;
+
+ this._connected = false;
+ var rv = this.request( 'client', 'destroy', { 'passwd':this._passwd } );
+ if (rv.get("result") == "Success") {
+ if( this._onDisconnect )
+ this._onDisconnect(self);
+ return true;
}
+ return false;
+ },
- return "http://" + hostname + ":" + port + "/";
-}
+ this.waitDisconnected = function( aTimeout ){
+ //TuxAPIServer.py:145
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
-/*
- *
- */
-function Public_TuxAPI_connect(name, passwd)
-{
- var id_client = Server_client_create(this.__base_url, name, passwd);
-
- if (this.__connected)
- {
- return true;
+ this.registerEventOnDisconnected = function( aFunction ){
+ this._onDisconnect = aFunction;
+ },
+
+ this.unregisterEventOnDisconnected = function(){
+ this._onDisconnect = null;
+ },
+
+ this.getConnected = function(){
+ return this._connected;
+ },
+
+ this.getClientLevel = function(){
+ return this._level;
+ },
+
+ this.getVersion = function(){
+ var rv = send_command( this._base_url + 'version?' );
+
+ if (rv.get("result") == "Success")
+ return rv.get("data0").get("version");
+
+ return null;
+ },
+
+ //request(self, cmd, varStruct = {}, varResult = {}, forceExec = False):
+ this.request = function( aModule, aCommand , someParams ){
+ //if ( !this._connected ) return false;
+
+ var cmd = this._base_url + aModule + '/' + aCommand + '?';
+ var params = '';
+
+ for (param in someParams){
+ params += param + '=' + someParams[param] + '&';
+ }
+ //XXX Check the last char if it is a & and remove it
+
+ return send_command( cmd + params );
+ }
+
+ // Private variables
+ this._onConnect = null;
+ this._onDisconnect = null;
+ this._base_url = 'http://' + aHost + ':' + aPort + '/';
+ this._connected = false;
+ this._passwd = '';
+ this._level = null;
+};
+
+
+
+
+/*****************************************************************************
+ * Event Namespace
+ * **************************************************************************/
+var TuxAPI_event = function(self){
+ this.setDelay = function( aValue ){
+ this._delay = aValue;
+ this.stop();
+ this.start();
+ },
+
+ this.start = function(){
+ if( this._timeout != null ) return;
+ this._timeout = setInterval( function(){
+ self.event.handler._retrieveEvents();
+ }, this._delay);
+ },
+
+ this.stop = function(){
+ clearInterval( this._delay );
+ this._delay = null;
+ },
+
+
+ this.handler = new TuxAPI_eventHandler(self),
+ this._delay = 100,
+ this._timeout = null
+};
+
+
+
+
+/*****************************************************************************
+ * Event Handler Namespace
+ * **************************************************************************/
+var TuxAPI_eventHandler = function(self){
+ this.register = function( anEventName, aFunc ){
+ if (this._callback_dict.containsKey( anEventName )){
+ this._callback_dict.put(anEventName, aFunc);
+ return true;
}
-
- if (id_client != "-1")
- {
- this.__passwd = passwd
- this.__base_url = this.__serv_url + id_client + "/";
- this.__connected = true;
- this.__fill_callback_dict();
-
- return true;
+ return false;
+ },
+
+ this.unregister = function( anEventName ){
+ if (this._callback_dict.containsKey( anEventName )){
+ if ( this._callback_dict.get( anEventName ) != null ){
+ this._callback_dict.remove(anEventName);
+ }
}
- else
- {
- return false;
+ return false;
+ },
+
+ this.insert = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.getEventHandler = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.storeContext = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.restoreContext = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.clearContext = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.emit = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.notify = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.waitCondition = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.clearPending = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this._callback_dict = new Hashtable(),
+ this.__fillCallbackDict = function(){
+ this._callback_dict.clear();
+ this._callback_dict.put("flippers_position", false);
+ this._callback_dict.put("flippers_remaining_movements", false);
+ this._callback_dict.put("spinning_direction", false);
+ this._callback_dict.put("spinning_remaining_movements", false);
+ this._callback_dict.put("left_wing_button", false);
+ this._callback_dict.put("right_wing_button", false);
+ this._callback_dict.put("head_button", false);
+ this._callback_dict.put("remote_button", false);
+ this._callback_dict.put("mouth_position", false);
+ this._callback_dict.put("mouth_remaining_movements", false);
+ this._callback_dict.put("eyes_position", false);
+ this._callback_dict.put("eyes_remaining_movements", false);
+ this._callback_dict.put("descriptor_complete", false);
+ this._callback_dict.put("radio_state", false);
+ this._callback_dict.put("dongle_plug", false);
+ this._callback_dict.put("charger_state", false);
+ this._callback_dict.put("battery_level", false);
+ this._callback_dict.put("battery_state", false);
+ this._callback_dict.put("light_level", false);
+ this._callback_dict.put("left_led_state", false);
+ this._callback_dict.put("right_led_state", false);
+ this._callback_dict.put("connection_quality", false);
+ this._callback_dict.put("audio_flash_play", false);
+ this._callback_dict.put("audio_general_play", false);
+ this._callback_dict.put("general_sound_state", false);
+ this._callback_dict.put("tts_pitch", false);
+ this._callback_dict.put("tts_locutor", false);
+ this._callback_dict.put("wav_0_sound_state", false);
+ this._callback_dict.put("wav_0_pause_state", false);
+ this._callback_dict.put("wav_0_stop", false);
+ this._callback_dict.put("tts_0_sound_state", false);
+ this._callback_dict.put("tts_0_pause_state", false);
+ this._callback_dict.put("tts_0_stop", false);
+ this._callback_dict.put("tts_0_voice_list", false);
+ },
+
+ this._retrieveEvents = function (){
+ if ( !self.server.getConnected() ) return;
+
+ var events_struct = self.status.events();
+
+ if (events_struct.get("server_run") == "Failed"){
+ this.server.disconnect();
}
-}
-/*
- *
- */
-function Public_TuxAPI_disconnect(passwd)
-{
- if (!this.__connected)
- {
- return false;
+ if (events_struct.get("result") != "Success"){
+ return; // No event was found
}
- else
- {
- this.__connected = false;
- return Server_client_destroy(this.__base_url, passwd);
+
+ var event_count = events_struct.get("data_count");
+ var cbk, event_name, data_node, event_struct;
+
+ for (var i = 0; i < event_count; i++){
+ data_node = 'data' + i;
+ event_struct = events_struct.get(data_node);
+ event_name = event_struct.get("name");
+ if (this._callback_dict.containsKey(event_name)){
+ cbk = this._callback_dict.get(event_name);
+ if (cbk != false){
+ cbk(event_struct.get("value"), event_struct.get("delay"));
+ }
+ }
}
-}
+ }
-/*
- *
- */
-function Public_TuxAPI_register_event(event_name, funct)
-{
- if (this.__callback_dict.containsKey(event_name))
- {
- this.__callback_dict.put(event_name, funct);
- return true;
+ // Constructor
+ this.__fillCallbackDict();
+};
+
+
+
+
+/*****************************************************************************
+ * Resource Spinning
+ * **************************************************************************/
+var TuxAPI_spinning = function(self){
+ this.leftOn = function( aCount ){
+ if (!this.leftOnAsync( aCount ) ) return false;
+ if (self.server.getClientLevel() == TuxAPI.CLIENT_LEVEL_ANONYME) return
true;
+ self.wait();
+ return true;
+ },
+
+ this.leftOnDuring = function( aDuration){
+ if (!this.leftOnDuringAsync( aCount ) ) return false;
+ if (self.__parent.server.getClientLevel() == TuxAPI.CLIENT_LEVEL_ANONYME)
return true;
+ self.wait();
+ return true;
+ },
+
+ this.leftOnAsync = function( aCount ){
+ var rv = self.server.request( 'spinning', 'left_on' , { 'count':aCount } );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
+
+ this.leftOnDuringAsync = function( aCount ){
+ var rv = self.server.request( 'spinning', 'left_on_during' , {
'duration':aDuration } );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
+
+ this.rightOn = function( aCount ){
+ if (!this.rightOnAsync( aCount ) ) return false;
+ if (self.server.getClientLevel() == TuxAPI.CLIENT_LEVEL_ANONYME) return
true;
+ self.wait();
+ return true;
+ },
+
+ this.rightOnDuring = function( aDuration ){
+ if (!this.rightOnDuringAsync( aCount ) ) return false;
+ if (self.__parent.server.getClientLevel() == TuxAPI.CLIENT_LEVEL_ANONYME)
return true;
+ self.wait();
+ return true;
+ },
+
+ this.rightOnAsync = function( aCount ){
+ var rv = self.server.request( 'spinning', 'right_on' , { 'count':aCount }
);
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
+
+ this.rigthOnDuringAsync = function(){
+ var rv = self.server.request( 'spinning', 'right_on_during' , {
'duration':aDuration } );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
+
+ this.setSpeed = function( aSpeed ){
+ var rv = self.server.request( 'spinning', 'speed' , { 'value':aSpeed } );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
+
+ this.off = function(){
+ var rv = self.server.request( 'spinning', 'off' , {} );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
+
+ this.waitLeftMovingOff = function(){
+ //TuxAPIFlippers.py:233
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.waitRightMovingOff = function(){
+ //TuxAPIFlippers.py:256
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.getDirection = function(){
+ if ( !self.server.getConnected() ) return "NDEF";
+
+ var rv = self.status.requestOne("spinning_direction");
+
+ if (rv.get("result") == "Success"){
+ return rv.get("data0").get("value");
}
- else
- {
+ return null;
+ },
+
+ this.getLeftMovingState = function(){
+ if ( !self.server.getConnected() ) return false;
+ var rv = self.status.requestOne("spin_left_motor_on");
+ if (rv.get("result") == "Success"){
+ if (rv.get("data0").get("value") == "0"){
return false;
+ }
}
-}
+ return true;
+ },
-/*
- *
- */
-function Private_TuxAPI_retrieve_events()
-{
- if (!this.__connected) return;
-
- events_struct = Server_status_events(this.__base_url);
-
- if (events_struct.get("server_run") == "Failed")
- {
- this.disconnect(this.__passwd);
+ this.getRightMovingState = function(){
+ if ( !self.server.getConnected() ) return false;
+ var rv = self.status.requestOne("spin_right_motor_on");
+ if (rv.get("result") == "Success"){
+ if (rv.get("data0").get("value") == "0"){
+ return false;
+ }
}
+ return true;
+ }
+
+};
- if (events_struct.get("result") != "Success")
- {
- // No event was found
- return;
+
+
+
+/*****************************************************************************
+ * Resource Leds
+ * XXX Arghhh. I need more namespace here (as in the python source )
+ * **************************************************************************/
+var TuxAPI_leds = function(self){
+ this.left = new TuxAPI_LedBase( self, 'LED_LEFT' );
+ this.right = new TuxAPI_LedBase( self, 'LED_RIGHT' );
+ this.both = new TuxAPI_LedBase( self , 'LED_BOTH' );
+};
+
+
+/*****************************************************************************
+ * Resource LedBase
+ * **************************************************************************/
+var TuxAPI_LedBase = function( self, aName ){
+ this.on = function( anIntensity ){
+ var rv = self.server.request( 'leds', 'on' , { 'intensity':anIntensity,
'leds':aName } );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
+
+ this.off = function(){
+ var rv = self.server.request( 'leds', 'off' , { 'leds':aName } );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
+
+ this.setIntensity = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.blinkDuring = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.blinkDuringAsync = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.blinkAsync = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.blink = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.getState = function(){
+ var led = aName.split('_')[1].toLowerCase();
+ var rv = self.status.requestOne(led + '_led_state');
+
+ if (rv.get("result") == "Success"){
+ return rv.get("data0").get("value");
}
-
- var event_count = events_struct.get("data_count");
- var i;
- var cbk;
- var event_name;
-
- for (i = 0; i < event_count; i++)
- {
- data_node = 'data' + i;
- event_struct = events_struct.get(data_node);
- event_name = event_struct.get("name");
- if (this.__callback_dict.containsKey(event_name))
- {
- cbk = this.__callback_dict.get(event_name);
- if (cbk != false)
- {
- cbk(event_struct.get("value"), event_struct.get("delay"));
- }
- }
- }
-}
+ return null;
+ }
+};
-/*
- *
- */
-function Private_TuxAPI_fill_callback_dict()
-{
- this.__callback_dict.clear();
- this.__callback_dict.put("wings_position", false);
- this.__callback_dict.put("wings_remaining_movements", false);
- this.__callback_dict.put("spinning_direction", false);
- this.__callback_dict.put("spinning_remaining_movements", false);
- this.__callback_dict.put("left_wing_button", false);
- this.__callback_dict.put("right_wing_button", false);
- this.__callback_dict.put("head_button", false);
- this.__callback_dict.put("remote_button", false);
- this.__callback_dict.put("mouth_position", false);
- this.__callback_dict.put("mouth_remaining_movements", false);
- this.__callback_dict.put("eyes_position", false);
- this.__callback_dict.put("eyes_remaining_movements", false);
- this.__callback_dict.put("descriptor_complete", false);
- this.__callback_dict.put("radio_state", false);
- this.__callback_dict.put("dongle_plug", false);
- this.__callback_dict.put("charger_state", false);
- this.__callback_dict.put("battery_level", false);
- this.__callback_dict.put("battery_state", false);
- this.__callback_dict.put("light_level", false);
- this.__callback_dict.put("left_led_state", false);
- this.__callback_dict.put("right_led_state", false);
- this.__callback_dict.put("connection_quality", false);
- this.__callback_dict.put("audio_flash_play", false);
- this.__callback_dict.put("audio_general_play", false);
- this.__callback_dict.put("general_sound_state", false);
- this.__callback_dict.put("tts_pitch", false);
- this.__callback_dict.put("tts_locutor", false);
- this.__callback_dict.put("wav_0_sound_state", false);
- this.__callback_dict.put("wav_0_pause_state", false);
- this.__callback_dict.put("wav_0_stop", false);
- this.__callback_dict.put("tts_0_sound_state", false);
- this.__callback_dict.put("tts_0_pause_state", false);
- this.__callback_dict.put("tts_0_stop", false);
- this.__callback_dict.put("tts_0_voice_list", false);
-}
-///////////////////////////////////////////////////////////////////////////////
-// Sub Class : TuxAPI_Mouth
-///////////////////////////////////////////////////////////////////////////////
+/*****************************************************************************
+ * Resource Flippers
+ * **************************************************************************/
+var TuxAPI_flippers = function(self){
+ this.on = function( aCount, aFinalState ){
+ if (!this.onAsync( aCount, aFinalState ) ) return false;
+ if (self.__parent.server.getClientLevel() == TuxAPI.CLIENT_LEVEL_ANONYME)
return true;
+ self.wait();
+ return true;
+ },
-/*
- * Class definition
- */
-function TuxAPI_Mouth(parent)
-{
- // Public methods
- this.on = Public_TuxAPI_Mouth_on;
- this.on_during = Public_TuxAPI_Mouth_on_during;
- this.off = Public_TuxAPI_Mouth_off;
- this.open = Public_TuxAPI_Mouth_open;
- this.close = Public_TuxAPI_Mouth_close;
- this.get_position = Public_TuxAPI_Mouth_get_position;
- this.get_move = Public_TuxAPI_Mouth_get_move;
-
- // Private variables
- this.__parent = parent
-}
+ this.onAsync = function( aCount, aFinalState ){
+ var rv = self.server.request( 'flippers', 'on' , { 'count':aCount,
'final_state':aFinalState } );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
-/*
- *
- */
-function Public_TuxAPI_Mouth_on(count, final_state)
-{
- if (!this.__parent.__connected) return false;
-
- return Server_mouth_on(this.__parent.__base_url, count, final_state)
-}
+ this.onDuring = function( aDuration, aFinalState ){
+ if (!this.onDuringAsync( aDuration, aFinalState ) ) return false;
+ if (self.__parent.server.getClientLevel() == TuxAPI.CLIENT_LEVEL_ANONYME)
return true;
+ self.wait();
+ return true;
+ },
-/*
- *
- */
-function Public_TuxAPI_Mouth_on_during(duration, final_state)
-{
- if (!this.__parent.__connected) return false;
-
- return Server_mouth_on_during(this.__parent.__base_url,
- duration, final_state)
-}
+ this.onDuringAsync = function( aDuration, aFinalState ){
+ var rv = self.server.request( 'flippers', 'on_during' , {
'duration':aDuration, 'final_state':aFinalState } );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
-/*
- *
- */
-function Public_TuxAPI_Mouth_off()
-{
- if (!this.__parent.__connected) return false;
-
- return Server_mouth_off(this.__parent.__base_url)
-}
+ this.setSpeed = function( aSpeed ){
+ var rv = self.server.request( 'flippers', 'speed' , { 'value':aSpeed } );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
-/*
- *
- */
-function Public_TuxAPI_Mouth_open()
-{
- if (!this.__parent.__connected) return false;
-
- return Server_mouth_open(this.__parent.__base_url)
-}
+ this.off = function(){
+ var rv = self.server.request( 'flippers', 'off' , {} );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
-/*
- *
- */
-function Public_TuxAPI_Mouth_close()
-{
- if (!this.__parent.__connected) return false;
-
- return Server_mouth_close(this.__parent.__base_url)
-}
+ this.up = function(){
+ var rv = self.server.request( 'flippers', 'up' , {} );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
-/*
- *
- */
-function Public_TuxAPI_Mouth_get_position()
-{
- if (!this.__parent.__connected) return "NDEF";
-
- var result_dict = Server_status_request_one(this.__parent.__base_url,
- "mouth_position")
-
- if (result_dict.get("result") == "Success")
- {
- return result_dict.get("data0").get("value");
+ this.down = function(){
+ var rv = self.server.request( 'flippers', 'down' , {} );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
+
+ this.waitMovingOff = function(){
+ //TuxAPIFlippers.py:204
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.waitPosition = function(){
+ //TuxAPIFlippers.py:216
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.getPosition = function(){
+ if ( !self.server.getConnected() ) return "NDEF";
+
+ var rv = self.status.requestOne("flippers_position");
+
+ if (rv.get("result") == "Success"){
+ return rv.get("data0").get("value");
}
- else
- {
- return null;
- }
-}
+ return null;
+ },
-/*
- *
- */
-function Public_TuxAPI_Mouth_get_move()
-{
- if (!this.__parent.__connected) return false;
-
- var result_dict = Server_status_request_one(this.__parent.__base_url,
- "mouth_remaining_movements")
-
- if (result_dict.get("result") == "Success")
- {
- if (result_dict.get("data0").get("value") == "0")
- {
- return false;
- }
- else
- {
- return true;
- }
- }
- else
- {
+ this.getMovingState = function(){
+ if ( !self.server.getConnected() ) return false;
+
+ var rv = self.status.requestOne("flippers_remaining_movements");
+
+ if (rv.get("result") == "Success"){
+ if (rv.get("data0").get("value") == "0"){
return false;
+ }
}
-}
-///////////////////////////////////////////////////////////////////////////////
-// Flat commands from server
-///////////////////////////////////////////////////////////////////////////////
+ return true;
+ }
+};
-function Server_send_command(cmd)
-{
- var result_dict = send_command(cmd);
-
- if (result_dict.get("result") == "Success")
- {
- return true;
+
+
+
+/*****************************************************************************
+ * Resource MouthEyes
+ * **************************************************************************/
+var TuxAPI_MouthEyes = function( self, aName ){
+ this.on = function( aCount, aFinalState){
+ var rv = self.server.request( aName, 'on' , { 'count':aCount,
'final_state':aFinalState } );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
+
+ this.onAsync = function(){
+ //count, finalState = SSV_NDEF):
+ //TuxAPIMouthEyes.py:73
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.onDuring = function( aDuration, aFinalState){
+ var rv = self.server.request( aName, 'on_during' , { 'duration':aDuration,
'final_state':aFinalState } );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
+
+ this.onDuringAsync = function(){
+ //TuxAPIMouthEyes.py:114
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.off = function(){
+ var rv = self.server.request( aName, 'off' , {} );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
+
+ this.open = function(){
+ var rv = self.server.request( aName, 'open' , {} );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
+
+ this.close = function(){
+ var rv = self.server.request( aName, 'close' , {} );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
+
+ this.waitMovingOff = function(){
+ //TuxAPIMouthEyes.py:177
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.waitPosition = function(){
+ //TuxAPIMouthEyes.py:189
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
+
+ this.getPosition = function(){
+ if (!self.server.getConnected()) return "NDEF";
+
+ var rv = self.status.requestOne(aName + "_position");
+
+ if (rv.get("result") == "Success"){
+ return rv.get("data0").get("value");
}
- else
- {
+
+ return null;
+ },
+
+ this.getMovingState = function(){
+ if (!self.server.getConnected()) return false;
+
+ var rv = self.status.requestOne(aName + "_remaining_movements");
+
+ if (rv.get("result") == "Success"){
+ if (rv.get("data0").get("value") == "0"){
return false;
+ }
+ else
+ return true;
}
-}
+
+ return false;
+ }
+};
-/*
- * Client resource
- */
-
-function Server_client_create(bcu, name, passwd)
-{
- var cmd = bcu + "client/create?level=0&name=" + name + "&passwd=" + passwd;
- var result_dict = send_command(cmd);
- var id_client = "-1";
- if (result_dict.get("result") == "Success")
- {
- id_client = result_dict.get("data0").get("client_id");
+
+
+/*****************************************************************************
+* Resource IR
+* **************************************************************************/
+var TuxAPI_ir = function(self){
+ this.on = function(){
+ var rv = self.server.request( 'ir', 'on' , {} );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
+
+ this.off = function(){
+ var rv = self.server.request( 'ir', 'off' , {} );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ },
+
+ this.send = function( anAddress, aCommand ){
+ var rv = self.server.request( 'ir', 'send' , { 'address':anAddress,
'command':aCommand } );
+ if (rv.get("result") == "Success") return true;
+ return false;
+ }
+};
+
+
+
+
+/*****************************************************************************
+ * Resource Status
+ * **************************************************************************/
+var TuxAPI_status = function(self){
+ this.events = function(){
+ return self.server.request( 'status', 'events', {} );
+ },
+ this.requestOne = function( aStatusName ){
+ return self.server.request( 'status', 'request_one', {
'status_name':aStatusName } );
+ },
+ this.requestAll = function(){
+ return self.server.request( 'status', 'request_all', {} );
+ },
+ this.send = function( aName, aValue ){
+ return self.server.request( 'status', 'send', { 'name':aName,
'value':aValue } );
+ },
+ this.wait = function(){
+ //wait(self, statusName, condition = None, timeout = 999999999.0):
+ //TuxAPIStatus.py:96
+ return TUXAPI_NOT_IMPLEMENTED;
+ }
+};
+
+
+
+
+/*****************************************************************************
+ * Resource DongleRadio
+ * **************************************************************************/
+var TuxAPI_DongleRadio = function( self, aName ){
+ this.getConnected = function(){
+ var rv = self.status.requestOne( aName + '_state' );
+ if (rv.get("result") == "Success"){
+ rv = rv.get("data0").get("value");
+ return rv;
}
-
- return id_client;
-}
+ return 'False';
+ },
-function Server_client_destroy(bcu, passwd)
-{
- var cmd = bcu + "client/destroy?passwd=" + passwd;
-
- return Server_send_command(cmd);
-}
+ this.waitConnected = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
-/*
- * Status resource
- */
-
-function Server_status_events(bcu)
-{
- var cmd = bcu + "status/events?";
-
- return send_command(cmd);
-}
-
-function Server_status_request_one(bcu, status_name)
-{
- var cmd = "status/request_one?status_name=" + status_name;
-
- return send_command(bcu + cmd);
-}
+ this.waitDisconnected = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
-function Server_status_request_all(bcu)
-{
- var cmd = "status/request_all?";
-
- return send_command(bcu + cmd);
-}
-
-/*
- * Mouth resource
- */
-
- function Server_mouth_open(bcu)
-{
- var cmd = bcu + 'mouth/open?';
-
- return Server_send_command(cmd);
-}
+ this.registerEventOnConnected = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
-function Server_mouth_close(bcu)
-{
- var cmd = bcu + 'mouth/close?';
-
- return Server_send_command(cmd);
-}
+ this.registerEventOnDisconnected = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
-function Server_mouth_on(bcu, count, final_state)
-{
- var cmd = bcu + 'mouth/on?';
- var params = 'count=' + count + '&final_state=' + final_state;
+ this.unregisterEventOnConnected = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ },
- return Server_send_command(cmd + params);
-}
+ this.unregisterEventOnDisconnected = function(){
+ return TUXAPI_NOT_IMPLEMENTED;
+ }
+};
-function Server_mouth_on_during(bcu, duration, final_state)
-{
- var cmd = bcu + 'mouth/on_during?';
- var params = 'duration=' + duration + '&final_state=' + final_state;
-
- return Server_send_command(cmd + params);
-}
-
-function Server_mouth_off(bcu)
-{
- var cmd = bcu + 'mouth/off?';
-
- return Server_send_command(cmd);
-}
\ No newline at end of file
------------------------------------------------------------------------------
This SF.net email is sponsored by:
SourcForge Community
SourceForge wants to tell your story.
http://p.sf.net/sfu/sf-spreadtheword
_______________________________________________
Tux-droid-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tux-droid-svn