Morena middleware2012
Upcoming SlideShare
Loading in...5
×
 

Morena middleware2012

on

  • 224 views

 

Statistics

Views

Total Views
224
Views on SlideShare
224
Embed Views
0

Actions

Likes
0
Downloads
4
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Morena middleware2012 Morena middleware2012 Presentation Transcript

    • MORENA: A Middleware for Programming NFC-enabled Android Applications as Distributed Object-Oriented Programs Andoni Lombide Carreton Kevin Pinte Wolfgang De Meuter ACM/IFIP/USENIX 13th International Conference on Middleware 2012 December 5 2012 Montreal, CanadaMonday 28 January 13
    • RFID in Android • NFC (touch range). NdefMessage: { • Callback on activities , to detect RFID tags with subscribed MIME- , NdefRecord type in memory. byte array } • File access abstraction read writeMonday 28 January 13
    • Drawbacks of the Android NFC API • Manual failure handling (and NFC causes A LOT of failures because of its hardware characteristics). • Blocking communication (Android documentation recommends to use a separate thread for many RFID operations). • Manual data conversion • Tight coupling with activity-based architectureMonday 28 January 13
    • Lessons Learnt from Previous Ambient-Oriented Programming Research • Using objects as first class software representations for RFID-tagged “things” is a nice abstraction. • These objects can be directly stored in the RFID tags’ memory to minimize data conversion. • Event-driven discovery (fortunately built-in into Android). • Asynchronous reads and writes.Monday 28 January 13
    • Middleware Architecture Application Thing level One middleware for Android 4.0 Tag level or higher AndroidMonday 28 January 13
    • Evaluation: WiFi Sharing ApplicationMonday 28 January 13
    • Evaluation: WiFi Sharing ApplicationMonday 28 January 13
    • Things From now on, we don’t public class WifiConfig extends Thing { have to worry about the public String ssid_; activity anymore. public String key_; public WifiConfig(ThingActivity<WifiConfig> activity, String ssid, String key) { super(activity); ssid_ = ssid; key_ = key; } public boolean connect(WifiManager wm) { // Connect to ssid_ with password key_ }; Supported serialization: } - JSON-serializable fields. - Skipping transient fields. - Deep serialization, no cycles.Monday 28 January 13
    • Initializing Things As soon as an empty tag is detected @Override public void whenDiscovered(EmptyRecord empty) { empty.initialize( myWifiThing, new ThingSavedListener<WifiConfig>() { @Override public void signal(WifiConfig thing) { toast("WiFi joiner created!"); } }, new ThingSaveFailedListener() { @Override public void signal() { toast("Creating WiFi joiner failed, try again."); } }); }Monday 28 January 13
    • Discovering and Reading Things As soon as a WifiConfig tag is detected @Override public void whenDiscovered(WifiConfig wc) { toast("Joining Wifi network " + wc.ssid_); wc.connect(); } Contains cached fields for synchronous access. Physical reads must be asynchronous.Monday 28 January 13
    • Saving Modified Things myWifiConfig.ssid_ = "MyNewWifiName"; myWifiConfig.key_ = "MyNewWifiPassword"; myWifiConfig.saveAsync( new ThingSavedListener<WifiConfig>() { @Override public void signal(WifiConfig wc) { toast("WiFi joiner saved!"); } }, new ThingSaveFailedListener() { @Override public void signal() { toast("Saving WiFi joiner failed, try again."); } });Monday 28 January 13
    • Broadcasting Things to Other Phones Will trigger whenDiscovered on the receiving phone with the broadcasted thing myWifiConfig.broadcast( new ThingBroadcastSuccessListener<WifiConfig>() { @Override public void signal(WifiConfig wc) { toast("WiFi joiner shared!"); } }, new ThingBroadcastFailedListener<WifiConfig>() { @Override public void signal(WifiConfig wc) { toast("Failed to share WiFi joiner, try again."); } });Monday 28 January 13
    • Evaluation: WiFi Sharing ApplicationMonday 28 January 13
    • Middleware Architecture Application Thing level One middleware for Android 4.0 Tag level or higher AndroidMonday 28 January 13
    • Detecting RFID Tags new MyTagDiscoverer(this, THING_TYPE, new NdefMessageToStringConverter(), new StringToNdefMessageConverter()); private class MyTagDiscoverer extends TagDiscoverer { @Override public void onTagDetected(TagReference tagReference) { readTagAndUpdateUI(tagReference); } @Override public void onTagRedetected(TagReference tagReference) { readTagAndUpdateUI(tagReference); } }Monday 28 January 13
    • The Tag Reference AbstractionMonday 28 January 13
    • Reading RFID Tags tagReference.read( new TagReadListener() { @Override public void signal(TagReference tagReference) { // tagReference.getCachedData() } }, new TagReadFailedListener() { @Override public void signal(TagReference tagReference) { // Deal with failure } });Monday 28 January 13
    • Writing RFID Tags tagReference.write( toWrite, new TagWrittenListener() { @Override public void signal(TagReference tagReference) { // Handle write success } }, new TagWriteFailedListener() { @Override public void signal(TagReference tagReference) { // Deal with failure } });Monday 28 January 13
    • Fine-grained Filtering private class MyTagDiscoverer extends TagDiscoverer { @Override public void onTagDetected(TagReference tagReference) { readTagAndUpdateUI(tagReference); } @Override public void onTagRedetected(TagReference tagReference) { readTagAndUpdateUI(tagReference); } @Override public boolean checkCondition(TagReference tagReference) { // Can be used to apply a predicate // on tagReference.getCachedData() } }Monday 28 January 13
    • Conclusion • Event-driven discovery. • Non-blocking communication: • Things: cached copy, asynchronous saving of cached data. • TagReferences: first class references to RFID tags offering asynchronous reads and writes. • Automatic data conversion • Looser coupling from activity-based architecture • Data structures over several tags, stronger consistency guarantees?Monday 28 January 13
    • MORENA: A Middleware for Programming NFC-enabled Android Applications as Distributed Object-Oriented Programs Andoni Lombide Carreton Kevin Pinte Wolfgang De Meuter ACM/IFIP/USENIX 13th International Conference on Middleware 2012 December 5 2012 Montreal, CanadaMonday 28 January 13