Pārlūkot izejas kodu

Bridged Client of Light Control Service was implemented and tested.

Trishia 4 gadi atpakaļ
vecāks
revīzija
18c8757da6

+ 3 - 3
app/sampledata/LightControlServiceData

@@ -1,9 +1,9 @@
 
 // retrieveAllDevices()
-[{"n":"Light Switch", "rt":["oic.d.light"], "sn":"2b32e152-3756-4fb6-b3f2-d8db7aafe39f", "state":"on-line"}]
+[{"n":"Light Control", "rt":["oic.d.light"], "sn":"15ba3c25-8cdd-41f8-6f9e-fe49105dce0a", "state":"on-line"}]
 
-[{"n":"Light Switch", "rt":["oic.d.light"], "sn":"2b32e152-3756-4fb6-b3f2-d8db7aafe39f", "state":"on-line"},
-{"n":"Television","rt":["oic.d.tv"], "sn":"2cd8e585-ef21-4fd1-7958-6ca7e54adcce","state":"off-line"}]
+[{"n":"Light Switch", "rt":["oic.d.light"], "sn":"15ba3c25-8cdd-41f8-6f9e-fe49105dce0a", "state":"on-line"},
+{"n":"Television","rt":["oic.d.tv"], "sn":"15ba3c25-8cdd-41f8-6f9e-fe49105dce0a","state":"off-line"}]
 
 // retrieveAllResources()
 [{"n":"Light Switch", "uri":"/light", "rt":["oic.r.switch.binary"], "if":"RW"},

+ 30 - 33
app/src/main/java/org/iotivity/bridge/homeserver/BridgeServer.java

@@ -2,7 +2,6 @@ package org.iotivity.bridge.homeserver;
 
 import android.util.Log;
 
-import org.iotivity.OCAddDeviceHandler;
 import org.iotivity.OCBridge;
 import org.iotivity.OCCoreRes;
 import org.iotivity.OCCred;
@@ -11,7 +10,6 @@ import org.iotivity.OCCredUtil;
 import org.iotivity.OCCreds;
 import org.iotivity.OCDeviceInfo;
 import org.iotivity.OCInterfaceMask;
-import org.iotivity.OCIntrospection;
 import org.iotivity.OCMain;
 import org.iotivity.OCMethod;
 import org.iotivity.bridge.homeserver.handler.BridgeInitHandler;
@@ -24,7 +22,6 @@ import org.iotivity.bridge.homeserver.handler.server.PutLightRequestHandler;
 import org.iotivity.bridge.homeserver.handler.server.PutRequestHandler;
 import org.iotivity.bridge.homeserver.model.Bridge;
 import org.iotivity.bridge.homeserver.model.Light;
-import org.iotivity.bridge.homeserver.model.OCFDevice;
 import org.iotivity.bridge.homeserver.model.VirtualOCFDevice;
 import org.iotivity.bridge.homeserver.utils.Utils;
 import org.iotivity.oc.OcBridge;
@@ -44,9 +41,9 @@ public class BridgeServer {
     private static final String TAG = BridgeServer.class.getSimpleName();
 
     // Virtual OCF Device's unique identifier such as uuid, MEID, serial number, mac address
-    private static final String LIGHT_UUID = "2b32e152-3756-4fb6-b3f2-d8db7aafe39f";
-    private static final String LIGHT2_UUID = "645b5166-3efb-4021-6ba0-4db90d434838";
-    private static final String CLIENT_UUID = "f2f0109f-ef7d-496a-9676-d3d87b38e52f";
+    public static final String LIGHT_UUID = "2b32e152-3756-4fb6-b3f2-d8db7aafe39f";
+    public static final String LIGHT2_UUID = "645b5166-3efb-4021-6ba0-4db90d434838";
+    public static final String CLIENT_UUID = "f2f0109f-ef7d-496a-9676-d3d87b38e52f";
 
     private OcPlatform ocPlatform;
     private OcBridge ocBridge ;
@@ -58,10 +55,8 @@ public class BridgeServer {
     private Light light = null ;
 
     private ArrayList<OcRemoteDevice> pairwised_devices = new ArrayList<OcRemoteDevice>();
-
     private ArrayList<OCUuid> pairwised_credential_uuids = new ArrayList<OCUuid>();
 
-
     public BridgeServer(BridgeService service) {
         this.service = service;
         this.bridge = new Bridge("Energy Home Hub");
@@ -106,17 +101,17 @@ public class BridgeServer {
     }
 
     public void resetVirtualOCFDevices() {
-        for(VirtualOCFDevice vod : bridge.getVODList()) {
+        for(VirtualOCFDevice vod : bridge.getVirtualOCFDeviceList()) {
             OCBridge.removeVirtualDevice(vod.getVODIndex());
             OCBridge.deleteVirtualDevice(vod.getVODIndex()); //  Note :This includes OCMain.resetDevice(index);
         }
-        bridge.clearAllVODList();
+        bridge.clearVirtualOCFDeviceList();
     }
 
     public void resetVirtualOCFDevice(int vod_index) {
         OCBridge.removeVirtualDevice(vod_index);
         OCBridge.deleteVirtualDevice(vod_index); // Note : This includes OCMain.resetDevice(index);
-        bridge.removeVODList(vod_index);
+        bridge.removeVirtualOCFDevice(vod_index);
     }
 
     public void resetDevice(int device_index) {
@@ -163,7 +158,7 @@ public class BridgeServer {
 
     public String existVirtualOCFDevice(String virtual_di, String econame) {
 
-        for(VirtualOCFDevice vod : bridge.getVODList()){
+        for(VirtualOCFDevice vod : bridge.getVirtualOCFDeviceList()){
             if(vod.getVirtualDeviceId().equals(virtual_di) && vod.getEcoName().equals(econame)) {
                 return vod.getVirtualDeviceId();
             }
@@ -171,19 +166,13 @@ public class BridgeServer {
         return null ;
     }
 
-    public VirtualOCFDevice addVirtualOCFDevice(String virtual_di, String device_type, String device_name, String eco_name) {
+    public VirtualOCFDevice addVirtualOCFDevice(String device_name, String virtual_di, String device_type, String eco_name) {
 
         // Add Virtual Device for Light
         OCUuid uuid = OCUuidUtil.stringToUuid(virtual_di);
         int vod_index = OCBridge.addVirtualDevice(uuid.getId(),
                 eco_name, "/oic/d", device_type,  // "oic.d.virtual" automatically added by internal api implements
-                device_name, "ocf.2.0.0", "ocf.res.1.3.0,ocf.sh.1.3.0",
-                new OCAddDeviceHandler() {
-                    @Override
-                    public void handler() {
-                        Log.d(TAG, "inside VirtualDevice.OCAddDeviceHandler.handler()");
-                    }
-                });
+                device_name, "ocf.2.0.0", "ocf.res.1.3.0,ocf.sh.1.3.0");
 
         if (vod_index != 0) {
             Log.d(TAG, "VOD Index = " + vod_index + ", VOD Count = " + OCBridge.getVirtualDeviceCount());
@@ -203,7 +192,7 @@ public class BridgeServer {
                         OCUuidUtil.bytesToString(vod_info.getId()), device_type);
                 vod.setDiscovered(true);
                 vod.setAddedToBridge(true);
-                bridge.addOrReplaceVODList(vod);
+                bridge.addOrReplaceVirtualOCFDevice(vod);
 
                 // set immutable device id for Platform Independent Identifier (piid)
                 OCMain.setImmutableDeviceIdentifier(vod_index, OCUuidUtil.stringToUuid(virtual_di));
@@ -248,13 +237,7 @@ public class BridgeServer {
         OCUuid uuid = OCUuidUtil.stringToUuid(virtual_di) ;
         int vod_index = OCBridge.addVirtualDevice(uuid.getId(),
                 econame, "/oic/d", "oic.d.light",  // "oic.d.virtual" automatically added by internal api implements
-                devicename, "ocf.2.0.0", "ocf.res.1.3.0,ocf.sh.1.3.0",
-                new OCAddDeviceHandler() {
-                    @Override
-                    public void handler() {
-                        Log.d(TAG, "inside VirtualDevice.OCAddDeviceHandler.handler()");
-                    }
-                });
+                devicename, "ocf.2.0.0", "ocf.res.1.3.0,ocf.sh.1.3.0");
 
         if (vod_index != 0) {
             Log.d(TAG, "VOD Index = "+ vod_index + ", VOD Count = " + OCBridge.getVirtualDeviceCount());
@@ -269,13 +252,12 @@ public class BridgeServer {
                         + ", Econame = " + vod_info.getEconame() + ", Name = " + dev_info.getName()
                         + " was added");
 
-
                 // Add VOD Data
                 VirtualOCFDevice vod = new VirtualOCFDevice(vod_index, devicename, econame,
                         OCUuidUtil.bytesToString(vod_info.getId()), "oic.d.light");
                 vod.setDiscovered(true);
                 vod.setAddedToBridge(true);
-                bridge.addOrReplaceVODList(vod);
+                bridge.addOrReplaceVirtualOCFDevice(vod);
 
                 // Add Light Device Resources and Handler
                 OCResource res_light = OCMain.newResource(devicename, "/light", (short)1, (long) vod_index);
@@ -321,7 +303,6 @@ public class BridgeServer {
 
     }
 
-
     public void removeLightVirtualOCFDevice(int vod_index) {
 
         OCVirtualDevice vod_light = OCBridge.getVirtualDeviceInfo(vod_index);
@@ -333,7 +314,7 @@ public class BridgeServer {
 
             int ret = OCBridge.removeVirtualDevice(vod_index);
             if (ret >=0) {
-                bridge.removeVODList(vod_index);
+                bridge.removeVirtualOCFDevice(vod_index);
             }
         }
     }
@@ -360,12 +341,28 @@ public class BridgeServer {
                         OCUuidUtil.bytesToString(vod_client.getId()), "oic.d.virtualclient");
                 vod.setDiscovered(true);
                 vod.setAddedToBridge(true);
-                bridge.addOrReplaceVODList(vod);
+                bridge.addOrReplaceVirtualOCFDevice(vod);
             }
         }
 
     }
 
+    public ArrayList<VirtualOCFDevice> getVirtualOCFDeviceList() {
+        return bridge.getVirtualOCFDeviceList();
+    }
+
+    public VirtualOCFDevice getVirtualOCFDevice(int vod_index) {
+        return bridge.getVirtualOCFDevice(vod_index);
+    }
+
+    public VirtualOCFDevice getVirtualOCFDevice(String vod_id) {
+        return bridge.getVirtualOCFDevice(vod_id);
+    }
+
+    public boolean isOwnedVirtualOCFDevice(int vod_index) {
+        return OCMain.isOwnedDevice(vod_index);
+    }
+
     /*
     private boolean checkExistVOD(String device_unique_id) {
         String device_uuid = existVirtualOCFDevice(devicename, econame);

+ 84 - 44
app/src/main/java/org/iotivity/bridge/homeserver/BridgeService.java

@@ -38,6 +38,7 @@ import org.iotivity.bridge.homeserver.handler.client.ObserveResponseHandler;
 import org.iotivity.bridge.homeserver.handler.client.PostResponseHandler;
 import org.iotivity.bridge.homeserver.handler.client.PutResponseHandler;
 import org.iotivity.bridge.homeserver.model.Bridge;
+import org.iotivity.bridge.homeserver.model.OCFDevice;
 import org.iotivity.bridge.homeserver.model.VirtualOCFDevice;
 import org.iotivity.bridge.homeserver.utils.Utils;
 import org.iotivity.oc.OcCborEncoder;
@@ -326,42 +327,44 @@ public class BridgeService extends IntentService {
                         JSONArray array = new JSONArray(devices);
 
                         for (int index = 0 ; index < array.length(); index++) {
-                            JSONObject obj = array.getJSONObject(index);
-                            Iterator<String> it = obj.keys();
+                            JSONObject devs = array.getJSONObject(index);
+                            Iterator<String> it_devs = devs.keys();
                             String n = null, sn = null, rt = null, state = null ;
 
-                            while (it.hasNext()) {
-                                String key = it.next();
-                                Object value = obj.get(key);
+                            while (it_devs.hasNext()) {
+                                String key = it_devs.next();
+                                Object value = devs.get(key);
                                 if (key.equals("n") && value instanceof String) {
                                     n = (String)value;
-                                    Log.d(TAG, "Light Control : n = " + n);
+                                    Log.d(TAG, "Light Device : n = " + n);
                                 } else if (key.equals("sn") && value instanceof String) {
                                     sn = (String)value;
-                                    Log.d(TAG, "Light Control : sn = " + sn);
+                                    Log.d(TAG, "Light Device : sn = " + sn);
                                 } else if (key.equals("rt") && value instanceof JSONArray) {
-                                    rt = ((JSONArray)value).toString();
-                                    Log.d(TAG, "Light Control : rt = " + rt);
+                                    Log.d(TAG, "Light Device : rt(org) = " + ((JSONArray)value).toString());
+                                    rt = ((JSONArray)value).getString(0);
+                                    Log.d(TAG, "Light Device : rt = " + rt);
                                 } else if (key.equals("state") && value instanceof String) {
                                     state = (String)value;
-                                    Log.d(TAG, "Light Control : state = " + state);
+                                    Log.d(TAG, "Light Device : state = " + state);
                                 }
                             }
                             // add device on ocf platform
-                            VirtualOCFDevice device = bridgeServer.addVirtualOCFDevice(sn, n, rt, ECO_NAME);
+                            VirtualOCFDevice device = bridgeServer.addVirtualOCFDevice(n, sn, rt, ECO_NAME);
+                            if(device==null) continue;
 
                             String resources = lightControlBinder.retrieveAllResources(sn);
                             Log.d(TAG, "Light Control retrieveAllResources() : " + resources);
                             if(resources!=null) {
-                                JSONArray aArr = new JSONArray(resources);
-                                for (int loop = 0 ; loop < aArr.length(); loop++) {
-                                    JSONObject ob = aArr.getJSONObject(loop);
-                                    Iterator<String> keys = ob.keys();
+                                JSONArray resArr = new JSONArray(resources);
+                                for (int loop = 0 ; loop < resArr.length(); loop++) {
+                                    JSONObject res = resArr.getJSONObject(loop);
+                                    Iterator<String> rKeys = res.keys();
                                     String rName = null, rUri = null, rRT = null, rIF = null ;
 
-                                    while (keys.hasNext()) {
-                                        String rKey = keys.next();
-                                        Object rValue = ob.get(rKey);
+                                    while (rKeys.hasNext()) {
+                                        String rKey = rKeys.next();
+                                        Object rValue = res.get(rKey);
                                         if (rKey.equals("n") && rValue instanceof String) {
                                             rName = (String)rValue;
                                             Log.d(TAG, "Light Resource : n = " + rName);
@@ -369,7 +372,8 @@ public class BridgeService extends IntentService {
                                             rUri = (String)rValue;
                                             Log.d(TAG, "Light Resource : uri = " + rUri);
                                         } else if (rKey.equals("rt") && rValue instanceof JSONArray) {
-                                            rRT = ((JSONArray)rValue).toString();
+                                            Log.d(TAG, "Light Resource : rt(org) = " + ((JSONArray)rValue).toString());
+                                            rRT = ((JSONArray)rValue).getString(0);
                                             Log.d(TAG, "Light Resource : rt = " + rRT);
                                         } else if (rKey.equals("if") && rValue instanceof String) {
                                             rIF = (String)rValue;
@@ -378,15 +382,22 @@ public class BridgeService extends IntentService {
                                     }
                                     // add resource on the device
                                     bridgeServer.addVirtualDeviceResource(device, rName, rUri, rRT, rIF);
-                                    Log.d(TAG, "Light Control doGetResourceProperties("+sn+", "+rUri+") : "+lightControlBinder.doGetResourceProperties(sn, rUri));
 
+                                    // get resource properties
+                                    String properites = lightControlBinder.doGetResourceProperties(sn, rUri);
+                                    Log.d(TAG, "Light Control doGetResourceProperties("+sn+", "+rUri+") : " + properites);
+
+                                    JSONObject props = new JSONObject(properites);
+                                    Iterator<String> pKeys = props.keys();
+                                    while(pKeys.hasNext()) {
+                                        String pKey = pKeys.next();
+                                        Object pValue = props.get(pKey);
+                                        // update properties state
+                                        device.addProperty(rUri, pKey, pValue);
+                                    }
                                 }
                             }
                         }
-                        //Log.d(TAG, "Light Control doGetResourceProperties() : "+lightControlBinder.doGetResourceProperties("2b32e152-3756-4fb6-b3f2-d8db7aafe39f", "/light"));
-                        //Log.d(TAG, "Light Control doGetResourceProperties() : "+lightControlBinder.doGetResourceProperties("2b32e152-3756-4fb6-b3f2-d8db7aafe39f", "/dimming"));
-                        //Log.d(TAG, "Light Control doPostResourceProperties() : "+lightControlBinder.doPostResourceProperties("2b32e152-3756-4fb6-b3f2-d8db7aafe39f", "/light", null));
-                        //Log.d(TAG, "Light Control doPostResourceProperties() : "+lightControlBinder.doPostResourceProperties("2b32e152-3756-4fb6-b3f2-d8db7aafe39f", "/dimming", null));
                     }
                 } catch (RemoteException | JSONException ex) {
                     Log.e(TAG, "Register Callback", ex);
@@ -434,8 +445,8 @@ public class BridgeService extends IntentService {
                     String res_type = obj.getString("res_type");    // GET, POST, PUT
                     String res_data = obj.getString("res_data");    // Properties
 
-                    Log.d(TAG, "Light Control doPostResourceProperties() : "+lightControlBinder.doPostResourceProperties(sn, uri, res_data));
-
+                    VirtualOCFDevice device = bridgeServer.getVirtualOCFDevice(sn);
+                    device.addProperties(uri, res_data);
                 }
             } catch (JSONException e) {
                 Log.e(TAG, "Light Control Service Remote Error : ", e);
@@ -467,12 +478,12 @@ public class BridgeService extends IntentService {
 
         @Override
         public String retrieveAllDevices() throws RemoteException {
-            return "[{\"n\":\"Light Switch\", \"rt\":[\"oic.d.light\"], \"sn\":\"2b32e152-3756-4fb6-b3f2-d8db7aafe39f\", \"state\":\"on-line\"}]";
+            return "[{\"n\":\"Light Control\", \"rt\":[\"oic.d.light\"], \"sn\":\""+BridgeServer.LIGHT2_UUID+"\", \"state\":\"on-line\"}]";
         }
 
         @Override
         public String retrieveAllResources(String device_uuid) throws RemoteException {
-            if("2b32e152-3756-4fb6-b3f2-d8db7aafe39f".equalsIgnoreCase(device_uuid)) {
+            if(BridgeServer.LIGHT2_UUID.equalsIgnoreCase(device_uuid)) {
                 return "[{\"n\":\"Light Switch\", \"uri\":\"/light\", \"rt\":[\"oic.r.switch.binary\"], \"if\":\"RW\"},\n" +
                         "{\"n\":\"Dimming Control\",\"uri\":\"/dimming\",\"rt\":[\"oic.r.light.dimming\"], \"if\":\"RW\"},\n" +
                         "{\"n\":\"Energy Consumption\", \"uri\":\"/EnergyConsumptionResURI\", \"rt\": [\"oic.r.energy.consumption\"], \"if\":\"S\"},\n" +
@@ -483,7 +494,7 @@ public class BridgeService extends IntentService {
 
         @Override
         public String doGetResourceProperties(String device_uuid, String resource_uri) throws RemoteException {
-            if("2b32e152-3756-4fb6-b3f2-d8db7aafe39f".equalsIgnoreCase(device_uuid)) {
+            if(BridgeServer.LIGHT2_UUID.equalsIgnoreCase(device_uuid)) {
                     if("/light".equalsIgnoreCase(resource_uri)) {
                         return "{\"n\":\"Light Switch\", \"value\":true}" ;
                     } else if("/dimming".equalsIgnoreCase(resource_uri)) {
@@ -498,22 +509,25 @@ public class BridgeService extends IntentService {
         }
 
         @Override
-        public boolean doPostResourceProperties(String device_uuid, String resource_uri, String prop_data) throws RemoteException {
-            if("2b32e152-3756-4fb6-b3f2-d8db7aafe39f".equalsIgnoreCase(device_uuid)) {
+        public boolean doPostResourceProperties(String device_sn, String resource_uri, String prop_data) throws RemoteException {
+
+            Log.d(TAG, "doPostResourceProperties called : device_sn = " + device_sn);
+            if(BridgeServer.LIGHT2_UUID.equalsIgnoreCase(device_sn)) {
+                Log.d(TAG, "Light Control Service : doPostResourceProperties() uri = " + resource_uri+ ", properites = " + prop_data);
                 if("/light".equalsIgnoreCase(resource_uri)) {
-                    String res_data = makeResultData(device_uuid, resource_uri, "{\"n\":\"Light Switch\", \"value\":true}");
+                    String res_data = makeResultData(device_sn, resource_uri, prop_data);
                     mHandler.sendMessage(mHandler.obtainMessage(MSG_LIGHT_RESULT, ResultType.OK.ordinal(), 0, res_data));
                     return true ;
                 } else if("/dimming".equalsIgnoreCase(resource_uri)) {
-                    String res_data = makeResultData(device_uuid, resource_uri, "{\"n\":\"Dimming Control\",\"dimmingSetting\":100,\"range\":100,\"step\":10}");
+                    String res_data = makeResultData(device_sn, resource_uri, prop_data);
                     mHandler.sendMessage(mHandler.obtainMessage(MSG_LIGHT_RESULT, ResultType.OK.ordinal(), 0, res_data));
                     return true ;
                 } else if("/EnergyConsumptionResURI".equalsIgnoreCase(resource_uri)) {
-                    String res_data = makeResultData(device_uuid, resource_uri, "{\"n\":\"Energy Consumption\",\"power\":200.1,\"energy\":3500.4}") ;
+                    String res_data = makeResultData(device_sn, resource_uri, prop_data) ;
                     mHandler.sendMessage(mHandler.obtainMessage(MSG_LIGHT_RESULT, ResultType.OK.ordinal(), 0, res_data));
                     return true ;
                 } else if("/ColourTemperatureResURI".equalsIgnoreCase(resource_uri)) {
-                    String res_data = makeResultData(device_uuid, resource_uri,  "{\"n\":\"Color Temperature\", \"ct\":457, \"range\":1000, \"step\":1}") ;
+                    String res_data = makeResultData(device_sn, resource_uri,  prop_data) ;
                     mHandler.sendMessage(mHandler.obtainMessage(MSG_LIGHT_RESULT, ResultType.OK.ordinal(), 0, res_data));
                     return true ;
                 }
@@ -561,9 +575,35 @@ public class BridgeService extends IntentService {
         return null ;
     }
 
-    public void doPostLightControlResource(String device_uuid, String resource_uri, String prop_data) {
+    public void doGetLightControlResources() {
+
+        // TODO : doGetProperties with Light Control Service
+        if(bridgeServer != null && lightBinder != null) {
+            ArrayList<VirtualOCFDevice> vods = bridgeServer.getVirtualOCFDeviceList();
+            for (VirtualOCFDevice vod : vods) {
+                if (vod.getEcoName().equals(LightControlServiceConnection.ECO_NAME) && vod.isDiscovered()
+                        && bridgeServer.isOwnedVirtualOCFDevice(vod.getVODIndex())) {
+                    String device_sn = vod.getVirtualDeviceId();
+                    for (OCFDevice.Resource resource : vod.getResources()) {
+                        try {
+                            lightBinder.doGetResourceProperties(device_sn, resource.getResourceUri());
+                        } catch (RemoteException e) {
+                            Log.e(TAG, "Light Control Service Remote Error : ", e);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    public void doPostLightControlResource(long device_index, String device_id, String resource_uri, String prop_data) {
         try {
-            lightBinder.doPostResourceProperties(device_uuid, resource_uri, prop_data);
+            OCUuid piid = OCCoreRes.getDeviceInfo(device_index).getPiid();
+            String device_sn = OCUuidUtil.uuidToString(piid); // same with vod_id(Virtual Device Id) of VirtualOCFDevice
+
+            Log.d(TAG, "doPostLightControlResource() called.");
+            lightBinder.doPostResourceProperties(device_sn, resource_uri, prop_data);
+
         } catch (RemoteException e) {
             Log.e(TAG, "Light Control Service Remote Error : ", e);
         }
@@ -725,19 +765,19 @@ public class BridgeService extends IntentService {
                     Log.d(TAG, msg);
                 }
                 Log.d(TAG, "DeviceDiscovery ScheduledTask per 60sec was called.");
-
-
             }
         }, 10, 90, TimeUnit.SECONDS); //90 sec interval after 10sec delay
 
-        /*executorService.scheduleAtFixedRate(new Runnable() {
+        executorService.scheduleAtFixedRate(new Runnable() {
             @Override
             public void run() {
-                // TODO
-                bridgeServer.loadPairwisedDeviceUUIDs();
+                // TODO : Pairwised device UUID
+                // bridgeServer.loadPairwisedDeviceUUIDs();
+                // TODO : Getting Properites of Light Control Service
+                doGetLightControlResources();
             }
-        }, 30, 60, TimeUnit.SECONDS); // 30sec interval after 30sec delay
-        */
+        }, 30, 180, TimeUnit.SECONDS); // 30sec interval after 30sec delay
+
         /*executorService.schedule(new Runnable() {
             @Override
             public void run() {

+ 2 - 2
app/src/main/java/org/iotivity/bridge/homeserver/handler/client/GetCommonResponseHandler.java

@@ -37,8 +37,8 @@ public class GetCommonResponseHandler implements OCResponseHandler {
 
         final ArrayList<Pair<String, Object>> props = ResponseParsingHelper.parseClientResponse(response, activity);
 
-        if(resource.getInterfaceMask() == OCInterfaceMask.RW ||
-                resource.getInterfaceMask() == OCInterfaceMask.A) {
+        if((resource.getInterfaceMask() & OCInterfaceMask.RW) > 0 ||
+                (resource.getInterfaceMask() & OCInterfaceMask.A) > 0) {
             activity.showPropertiesDialog( "Properties of " + this.resource.getUri(), props, resource);
             Log.d(TAG, "Properties : " + Utils.propertiesToString(props));
         } else {

+ 3 - 3
app/src/main/java/org/iotivity/bridge/homeserver/handler/server/GetBridgeRequestHandler.java

@@ -61,14 +61,14 @@ public class GetBridgeRequestHandler implements OCRequestHandler {
                 case OCInterfaceMask.R: {
                     root.setStringArray("rt", new String[]{ Bridge.VODLIST_RT });
                     OcCborEncoder vodList = OcCborEncoder.createOcCborEncoder(OcCborEncoder.EncoderType.ARRAY, root, Bridge.VODS);
-                    for (VirtualOCFDevice vod : bridge.getVODList()) {
+                    for (VirtualOCFDevice vod : bridge.getVirtualOCFDeviceList()) {
                         OcCborEncoder mediaObject = OcCborEncoder.createOcCborEncoder(OcCborEncoder.EncoderType.ARRAY_ITEM, vodList);
-                        mediaObject.setTextString(VirtualOCFDevice.NAME_KEY, vod.getName());
+                        mediaObject.setTextString(VirtualOCFDevice.NAME_KEY, vod.getDeviceName());
                         mediaObject.setTextString(VirtualOCFDevice.ECONAME_KEY, vod.getEcoName());
                         mediaObject.setTextString(VirtualOCFDevice.DI_KEY, vod.getVirtualDeviceId());
                         mediaObject.done();
 
-                        activity.msg("\t\t" + vod.getName() + ", " + vod.getEcoName() + "," + vod.getVirtualDeviceId());
+                        activity.msg("\t\t" + vod.getDeviceName() + ", " + vod.getEcoName() + "," + vod.getVirtualDeviceId());
                     }
                     vodList.done();
                     break;

+ 5 - 4
app/src/main/java/org/iotivity/bridge/homeserver/handler/server/GetRequestHandler.java

@@ -67,14 +67,15 @@ public class GetRequestHandler implements OCRequestHandler {
                         } else if(value instanceof String) {
                             root.setTextString(key, (String)value);
                         } else if(value instanceof Integer || value instanceof Long) {
-                            root.setLong(key, (long)value);
+                            if(value instanceof Integer) root.setLong(key, (int)value);
+                            else if(value instanceof Long) root.setLong(key, (long)value);
                         } else if(value instanceof Double || value instanceof Float) {
-                            root.setDouble(key, (double)value);
+                            if(value instanceof Double) root.setDouble(key, (double)value);
+                            else if(value instanceof Float) root.setDouble(key, (float)value);
                         }
                     }
                 }
-                // TODO : doGetProperties with Light Control Service
-                service.doGetDeviceResource(device_uuid, resource_uri);
+
                 break;
             default:
                 break;

+ 11 - 11
app/src/main/java/org/iotivity/bridge/homeserver/handler/server/PostRequestHandler.java

@@ -35,12 +35,12 @@ public class PostRequestHandler implements OCRequestHandler {
     @Override
     public void handler(OCRequest request, int interfaces) {
         Log.d(TAG, "inside Post Request Handler");
-
-        OCUuid uuid = OCCoreRes.getDeviceId(request.getResource().getDevice());
-        String device_uuid = OCUuidUtil.uuidToString(uuid);
+        long device_index = request.getResource().getDevice();
+        OCUuid uuid = OCCoreRes.getDeviceId(device_index);
+        String device_id = OCUuidUtil.uuidToString(uuid);
         String resource_uri = request.getResource().getUri();
 
-        service.msg("Post "+resource_uri+"of "+device_uuid+" Request Received.");
+        Log.d(TAG, "Post "+resource_uri+" of "+device_id+" Request Received.");
         try {
 
             OcRepresentation rep = new OcRepresentation(request.getRequestPayload());
@@ -48,25 +48,25 @@ public class PostRequestHandler implements OCRequestHandler {
             while (rep != null) {
                 if(rep.getType() == OCType.OC_REP_BOOL) {
                     obj.put(rep.getKey(), rep.getBoolean());
-                    service.msg("\t\t" + rep.getKey() + ": " + rep.getBoolean());
+                    Log.d(TAG, "\t\t" + rep.getKey() + ": " + rep.getBoolean());
                 } else if(rep.getType() == OCType.OC_REP_STRING) {
                     obj.put(rep.getKey(), rep.getString());
-                    service.msg("\t\t" + rep.getKey() + ": " + rep.getString());
+                    Log.d(TAG, "\t\t" + rep.getKey() + ": " + rep.getString());
                 } else if(rep.getType() == OCType.OC_REP_INT) {
                     obj.put(rep.getKey(), rep.getLong());
-                    service.msg("\t\t" + rep.getKey() + ": " + rep.getLong());
+                    Log.d(TAG, "\t\t" + rep.getKey() + ": " + rep.getLong());
                 } else if(rep.getType() == OCType.OC_REP_DOUBLE) {
                     obj.put(rep.getKey(), rep.getDouble());
-                    service.msg("\t\t" + rep.getKey() + ": " + rep.getDouble());
+                    Log.d(TAG, "\t\t" + rep.getKey() + ": " + rep.getDouble());
                 } else if(rep.getType() == OCType.OC_REP_ARRAY) {
                     obj.put(rep.getKey(), rep.getArray());
-                    service.msg("\t\t" + rep.getKey() + ": " + rep.getArray().toString());
+                    Log.d(TAG, "\t\t" + rep.getKey() + ": " + rep.getArray().toString());
                 }
 
                 rep = rep.getNext();
             }
             // TODO : doPostProperties() with Light Control Service
-            service.doPostDeviceResource(device_uuid, resource_uri, obj.toString());
+            service.doPostLightControlResource(device_index, device_id, resource_uri, obj.toString());
 
         } catch (JSONException e) {
             Log.e(TAG, "JSON Error", e);
@@ -74,7 +74,7 @@ public class PostRequestHandler implements OCRequestHandler {
             Log.e(TAG, "CBOR Error", e);
         }
 
-        service.printLine();
+        //service.printLine();
         OcUtils.sendResponse(request, OCStatus.OC_STATUS_CHANGED);
     }
 }

+ 13 - 6
app/src/main/java/org/iotivity/bridge/homeserver/model/Bridge.java

@@ -72,15 +72,15 @@ public class Bridge {
         this.di = di;
     }
 
-    public ArrayList<VirtualOCFDevice> getVODList() {
+    public ArrayList<VirtualOCFDevice> getVirtualOCFDeviceList() {
         return vod_lists;
     }
 
-    public void clearAllVODList() {
+    public void clearVirtualOCFDeviceList() {
         vod_lists.clear();
     }
 
-    public boolean addOrReplaceVODList(VirtualOCFDevice new_vod) {
+    public boolean addOrReplaceVirtualOCFDevice(VirtualOCFDevice new_vod) {
         for(VirtualOCFDevice vod : vod_lists) {
             if(vod.getVODIndex() == new_vod.getVODIndex()) {
                 vod.setVirtualDeviceId(new_vod.getVirtualDeviceId());
@@ -92,15 +92,15 @@ public class Bridge {
         return this.vod_lists.add(new_vod);
     }
 
-    public boolean removeVODList(VirtualOCFDevice vod) {
+    public boolean removeVirtualOCFDevice(VirtualOCFDevice vod) {
 
         return this.vod_lists.remove(vod);
     }
 
-    public boolean removeVODList(int vod_index) {
+    public boolean removeVirtualOCFDevice(int vod_index) {
         VirtualOCFDevice vod = getVirtualOCFDevice(vod_index);
         if(vod != null) {
-            return removeVODList(vod);
+            return removeVirtualOCFDevice(vod);
         }
         return false;
     }
@@ -112,4 +112,11 @@ public class Bridge {
         return null ;
     }
 
+    public VirtualOCFDevice getVirtualOCFDevice(String vod_id) {
+        for (VirtualOCFDevice vod : vod_lists) {
+            if(vod.getVirtualDeviceId().equalsIgnoreCase(vod_id)) return vod ;
+        }
+        return null ;
+    }
+
 }

+ 24 - 0
app/src/main/java/org/iotivity/bridge/homeserver/model/OCFDevice.java

@@ -1,11 +1,19 @@
 package org.iotivity.bridge.homeserver.model;
 
+import android.util.Log;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.Properties;
 
 public class OCFDevice {
 
+    protected static final String TAG = OCFDevice.class.getName() ;
+
     // device key name
     static public final String NAME_KEY = "n";
     static public final String DI_KEY = "di";
@@ -124,4 +132,20 @@ public class OCFDevice {
         Resource resource = getResource(resource_uri);
         resource.addOrReplaceProperty(key, value);
     }
+
+    public void addProperties(String resource_uri, String properties) {
+        Resource resource = getResource(resource_uri);
+        try {
+            JSONObject props = new JSONObject(properties);
+            Iterator<String> keys = props.keys();
+            while(keys.hasNext()) {
+                String key = keys.next() ;
+                Object value = props.get(key);
+                resource.addOrReplaceProperty(key, value);
+            }
+        } catch (JSONException e) {
+            Log.e(TAG, "JSON Error :", e);
+        }
+    }
+
 }

+ 0 - 7
app/src/main/java/org/iotivity/bridge/homeserver/model/VirtualOCFDevice.java

@@ -64,13 +64,6 @@ public class VirtualOCFDevice extends OCFDevice {
         this.added_to_bridge = added;
     }
 
-    public boolean isOwned() {
-        return isOwned;
-    }
-    public void setOwned(boolean owned) {
-        this.isOwned = owned;
-    }
-
     @Override
     public String toString() {
         StringBuffer sb = new StringBuffer();