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

Reply via email to