Difference between revisions of "Luna Send"

From WebOS Internals
Jump to navigation Jump to search
(revamp)
Line 1: Line 1:
NOTE: You have to run with root perms..
+
webOS applications may have backend components (that may not be implementable in JavaScript, or require extra hardware processing of native language) that are accessed through the <tt>Mojo.Service</tt> API. The browser engine delegates these calls from JavaScript to the backend components through the D-Bus architecture.
  
 +
With root permissions, the end user may be able to interact with the backends directly with the <tt>luna-send</tt> utility.
  
 +
== Implementation ==
 +
For example, the following JavaScript fragment:
 +
<tt>
 +
Mojo.Service.Request("palm://com.palm.systemservice/time", { method: "getSystemTime", onSuccess: callback });
 +
</tt>
 +
 +
corresponds to
 +
 +
<tt>
 +
luna-send -n 1 palm://com.palm.systemservice/time/getSystemTime {}
 +
</tt>
 +
 +
Given that these are all effectively D-Bus calls happening, a <tt>luna-send</tt> call can be made equivalently with <tt>dbus-send</tt>, for example, the two commands below yield the same result:
 +
 +
<tt>
 +
luna-send -n 1 palm://com.palm.systemservice/time/getSystemTime {}
 +
dbus-send --system --type=method_call --print-reply --dest=com.palm.systemservice /time org.json.getSystemTime string:"{}"
 +
</tt>
 +
 +
== Examples ==
 
Kick off a manual Palm Backup entirely from the command line:
 
Kick off a manual Palm Backup entirely from the command line:
 
<pre><nowiki>
 
<pre><nowiki>
Line 197: Line 218:
  
  
==Applications==
+
===Applications===
  
 
Notes (view notes):
 
Notes (view notes):
Line 217: Line 238:
 
luna-send -n 1 palm://com.palm.storage/diskmode/enterMSM {\"user-confirmed\":true,\"enterIMasq\":false}
 
luna-send -n 1 palm://com.palm.storage/diskmode/enterMSM {\"user-confirmed\":true,\"enterIMasq\":false}
 
</nowiki></pre>
 
</nowiki></pre>
 
--WOOT--
 
 
  
 
==Airplane Mode==
 
==Airplane Mode==
Line 234: Line 252:
 
</nowiki></pre>
 
</nowiki></pre>
  
 +
== Searching for services ==
  
==Finding luna-send Command==
+
As mentioned above, since <tt>Mojo.Service.Request</tt> (or, equivalently, through the scene controller's <tt>serviceRequest<tt> method) make use of D-Bus, we can use two methods to determine what external calls can be made to their backend components
  
These commands come from inside given applications. The best way to find luna-send commands is to do a search for the term "method:" in the Applications code.  Once you find method: you might see parameters: which is also used by luna-send here is an example.
+
=== By examining JavaScript source ===
  
searched for "method:" in the com.app.palm.AppYouAreTesting
+
Simply grep through the application for <tt>Mojo.Service.Request</tt> or <tt>serviceRequest</tt> calls and note how they are invoked. They then can be adapted to use <tt>luna-send</tt>.
  
found
+
=== By examining dbus traffic directly ===
  
"method: test"
+
There are some tools available to trace D-Bus calls happening as the application is running, such as <tt>dbus-monitor</tt> or <tt>dbus-util</tt>.
  
luna-send command based on example:
+
==== Example ====
<pre><nowiki>
+
To determine what governs roaming mode capability, we may do the following.
luna-send -n 1 palm://com.palm.AppYouAreTesting/test {}
 
</nowiki></pre>
 
 
 
General luna-send command:
 
<pre><nowiki>
 
luna-send -n 1 palm://ApplicationName/MethodValue {ParameterValues}
 
</nowiki></pre>
 
 
 
==Searching for services with dbus==
 
 
<pre>
 
<pre>
Run dbus-util capture and search for services/methods/parameters. - xorg
 
 
 
# dbus-util --capture 2>&1 |tee /tmp/dbus.dump
 
# dbus-util --capture 2>&1 |tee /tmp/dbus.dump
 
Perform functions on device that you want to trap, such as setting phone to automatic roaming.
 
Ctrl-c from dbus.
 
 
Searches to try...
 
# grep // /tmp/dbus.dump
 
# grep com.palm /tmp/dbus.dump
 
# grep palm:// tmp/dbus.dump
 
 
# grep roam /tmp/dbus.dump
 
# grep roam /tmp/dbus.dump
 
This is found in the dump...
 
 
   com.palm.luna2  com.palm.telephony      //roamModeSet  «string=â{"mode": "homeonly"}
 
   com.palm.luna2  com.palm.telephony      //roamModeSet  «string=â{"mode": "homeonly"}
 +
</pre>
  
com.palm.telophony is the service
+
From this we see:
//roamModeSet is the method
+
* <tt>com.palm.telephony</tt> is the service
"mode":"homeonly" is the parameter
+
* <tt>roamModeSet<tt> is the method
 
+
* <tt>{ mode: "homeonly" }</tt> is the parameter
Translate to luna-send...
 
  
 +
Thus:
 +
</pre>
 
luna-send -n 1 palm://com.palm.telephony/roamModeSet '{"mode":"homeonly"}'
 
luna-send -n 1 palm://com.palm.telephony/roamModeSet '{"mode":"homeonly"}'
 
</pre>
 
</pre>
 +
 +
would perform the same function from the command line.

Revision as of 14:36, 1 October 2011

webOS applications may have backend components (that may not be implementable in JavaScript, or require extra hardware processing of native language) that are accessed through the Mojo.Service API. The browser engine delegates these calls from JavaScript to the backend components through the D-Bus architecture.

With root permissions, the end user may be able to interact with the backends directly with the luna-send utility.

Implementation

For example, the following JavaScript fragment: Mojo.Service.Request("palm://com.palm.systemservice/time", { method: "getSystemTime", onSuccess: callback });

corresponds to

luna-send -n 1 palm://com.palm.systemservice/time/getSystemTime {}

Given that these are all effectively D-Bus calls happening, a luna-send call can be made equivalently with dbus-send, for example, the two commands below yield the same result:

luna-send -n 1 palm://com.palm.systemservice/time/getSystemTime {} dbus-send --system --type=method_call --print-reply --dest=com.palm.systemservice /time org.json.getSystemTime string:"{}"

Examples

Kick off a manual Palm Backup entirely from the command line:

luna-send -n 1 palm://com.palm.applicationManager/launch '{"id":"com.palm.app.backup"}'
luna-send -n 1 palm://com.palm.backup/startBackup '{}'
luna-send -n 1 palm://com.palm.applicationManager/running '{}'
luna-send -n 1 palm://com.palm.applicationManager/close '{"processId":"(GET ID NUMBER FROM /RUNNING)"}'


Connect to any (known) WAP in range (or simply turn on WiFi):

luna-send -n 1 palm://com.palm.wifi/setstate '{"state":"enabled"}'
luna-send -n 1 palm://com.palm.wifi/findnetworks '{""}'


Disconnect from WiFi:

luna-send -n 1 palm://com.palm.wifi/setstate '{"state":"disabled"}'

Turn Bluetooth ON:

luna-send -n 1 palm://com.palm.btmonitor/monitor/radioon '{"visible":true, "connectable":true}'

Turn Bluetooth OFF:

luna-send -n 1 palm://com.palm.btmonitor/monitor/radiooff {}

Using luna-send to refresh the Launcher panel.

luna-send -n 1 palm://com.palm.applicationManager/rescan {}


Get a list of all installed apps:

luna-send -n 1 "palm://com.palm.applicationManager/listLaunchPoints" "{}"


Using luna-send to launch an application:

luna-send -n 1 palm://com.palm.applicationManager/launch {\"id\":\"com.palm.app.browser\"}
luna-send -n 1 palm://com.palm.applicationManager/launch {\"id\":\"com.palm.app.browser\",\"params\":{\"scene\":\"page\",\"target\":\"http://www.google.com\"}}


The second command shows how to open www.google.com when the browser is launched.

Using luna-send to download a file to /media/internal/downloads/:

luna-send -n 1 palm://com.palm.downloadmanager/download {\"target\":\"http://www.google.com/index.html\"}  

Replace www.google.com/index.html with whatever file you want downloaded.


Using luna-send to first import and then set the wallpaper image:

luna-send -n 1 palm://com.palm.systemservice/wallpaper/importWallpaper {"target": "/media/internal/wallpapers/your_file.jpg" }
luna-send -n 1 palm://com.palm.systemservice/setPreferences {"wallpaper": {"wallpaperName": "your_file.jpg", "wallpaperFile": "/media/internal/wallpapers/your_file.jpg"}}

Replace your_file.jpg with whatever file in the wallpapers folder you want for your next wallpaper.


Using luna-send to control the palm progress animation (The pulsing "palm" logo seen at boot):

luna-send -n 1 palm://com.palm.systemmanager/runProgressAnimation {\"state\":\"start\"}
luna-send -n 1 palm://com.palm.systemmanager/runProgressAnimation {\"state\":\"stop\"}

TODO: These should probably be plugged into the Tracker app.


luna-send -n 1 palm://com.palm.location/setUseGps {\"useGps\":\"true\"}
luna-send -n 1 palm://com.palm.location/setAutoLocate {\"autoLocate\":\"true\"}
luna-send -n 1 palm://com.palm.location/getCurrentPosition {}


List all of the processes which are running:

sudo luna-send -n 1 palm://com.palm.applicationManager/running {}
** Message: serviceResponse Handling: 2, { "running": [ { "id": "com.palm.launcher", "processid": "1006" }, { "id": "com.palm.systemui", "processid": "1007" }, { "id": "com.palm.app.email", "processid": "1000" }, { "id": "com.palm.app.phone", "processid": "1001" }, { "id": "com.palm.app.contacts", "processid": "1002" }, { "id": "com.palm.app.camera", "processid": "1003" }, { "id": "com.palm.app.messaging", "processid": "1004" }, { "id": "com.palm.app.calendar", "processid": "1005" }, { "id": "com.palm.app.phone", "processid": "1008" }, { "id": "com.palm.app.camera", "processid": "1014" } ] }

Interesting note: Seems everything with a processid below 1008 are static. As seen above, open camera app has pid 1014 and startup app is pid 1003


Close a process:

luna-send -n 1 "palm://com.palm.applicationManager/close" "{\"processId\":\"1058\"}"


Activate the vibrator:

luna-send -n 1 palm://com.palm.vibrate/vibrate {\"period\":1,\"duration\":1000\}

The duration value is in milliseconds and can be adjusted as desired.


Photos Info - list album and image from mediadb.db3:

luna-send -n 1 luna://com.palm.mediadb/image/listalbums {}
luna-send -n 1 luna://com.palm.mediadb/image/listimages {}


Set system volume - "volume" range is 0-100

luna-send -n 1 palm://com.palm.audio/system/setVolume '{"volume":80}'


Set media volume - "volume" range is 0-100

luna-send -n 1 palm://com.palm.audio/media/setVolume '{"volume":80}'


Set ringtone volume - "volume" range is 0-100

luna-send -n 1 palm://com.palm.audio/ringtone/setVolume '{"volume":100}'


Dial a number - this actually calls the number, not just setup

luna-send -n 1 palm://com.palm.telephony/dial '{"number":"8001234567"}'


Hash command RTN: ##RTN# aka ##786# commands using Luna-Send (Becarful Palm calls this Nuking your phone and do not remove battery when using

luna-send -n 1 luna://com.palm.telephony/radioDefaultsRestore {} 
luna-send -n 1 luna://com.palm.telephony/resetRadio {}
luna-send -n 1 luna://com.palm.storage/erase/EraseAll {}


Hang up a phone call :-) There are ways to end specific types of calls but I think this is good enough for now. Let me know if you want the other methods.

luna-send -n 1 palm://com.palm.telephony/hangupAll {}


Send a text message - only need to change phone "value" and "messageText"

luna-send -n 1 palm://com.palm.messaging/sendMessageFromCompose '{"recipientJSONArray": [{"lastName": "", "pictureLoc": "", "contactCount": 1, "displayText": "", "firstName": "", "pictureLocBig": "", "imAvailability": 6, "pictureLocSquare": "", "contactDisplay": "", "Person_id": "", "personId": "", "type": "phone", "value": "8165551234", "alreadyValidated": true, "prefix": "to$A", "identifier": ""}], "messageText": "Content of message here"}'


set phone to no roam (home network only)

luna-send -n 1 palm://com.palm.telephony//roamModeSet '{"mode":"homeonly"}'


set phone to auto roam

luna-send -n 1 palm://com.palm.telephony//roamModeSet '{"mode":"any"}'


set phone to roam only

luna-send -n 1 palm://com.palm.telephony//roamModeSet '{"mode":"roamonly"}'


Applications

Notes (view notes):

luna-send -n 1 palm://com.palm.notes/getNotes {}


Storage

Enter usb storage mode:

luna-send -n 1 palm://com.palm.storage/diskmode/enterMSM {\"user-confirmed\":true,\"enterIMasq\":false}


Exit usb storage mode (toggle):

luna-send -n 1 palm://com.palm.storage/diskmode/enterMSM {\"user-confirmed\":true,\"enterIMasq\":false}

Airplane Mode

Enable Airplane Mode:

luna-send -n 1 palm://com.palm.systemservice/setPreferences '{"airplaneMode":true}'


Disable Airplane Mode:

luna-send -n 1 palm://com.palm.systemservice/setPreferences '{"airplaneMode":false}'

Searching for services

As mentioned above, since Mojo.Service.Request (or, equivalently, through the scene controller's serviceRequest method) make use of D-Bus, we can use two methods to determine what external calls can be made to their backend components

By examining JavaScript source

Simply grep through the application for Mojo.Service.Request or serviceRequest calls and note how they are invoked. They then can be adapted to use luna-send.

By examining dbus traffic directly

There are some tools available to trace D-Bus calls happening as the application is running, such as dbus-monitor or dbus-util.

Example

To determine what governs roaming mode capability, we may do the following.

# dbus-util --capture 2>&1 |tee /tmp/dbus.dump
# grep roam /tmp/dbus.dump
  com.palm.luna2  com.palm.telephony      //roamModeSet   «string=â{"mode": "homeonly"}

From this we see:

  • com.palm.telephony is the service
  • roamModeSet is the method
  • { mode: "homeonly" } is the parameter

Thus:

luna-send -n 1 palm://com.palm.telephony/roamModeSet '{"mode":"homeonly"}'

would perform the same function from the command line.