Преглед изворни кода

Bridged Client of Light Control Service and sample data was modifed and tested.

Trishia пре 4 година
родитељ
комит
1934702106

+ 48 - 6
app/sampledata/LightControlServiceData

@@ -1,25 +1,67 @@
 
 // retrieveAllDevices()
+@return json array
 [{"n":"Light Control", "rt":["oic.d.light"], "sn":"15ba3c25-8cdd-41f8-6f9e-fe49105dce0a", "state":"on-line"}]
-
+<or>
 [{"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()
+// retrieveAllResources(String device_uuid)
+@param device_uuid : "15ba3c25-8cdd-41f8-6f9e-fe49105dce0a"
+@return json array
 [{"n":"Light Switch", "uri":"/light", "rt":["oic.r.switch.binary"], "if":"RW"},
 {"n":"Dimming Control","uri":"/dimming","rt":["oic.r.light.dimming"], "if":"RW"},
 {"n":"Energy Consumption", "uri":"/EnergyConsumptionResURI", "rt": ["oic.r.energy.consumption"], "if":"S"},
 {"n":"Color Temperature", "uri":"/ColourTemperatureResURI", "rt": ["oic.r.colour.colourtemperature"], "if":"A"}]
 
-// doGetResourceProperties(in String device_uuid, in String resource_uri)
+// doGetResourceProperties(String device_uuid, in String resource_uri)
+@param device_uuid : "15ba3c25-8cdd-41f8-6f9e-fe49105dce0a"
+@param resource_uri : "/light"
+@return json object
 {"n":"Light Switch", "value":true}
+
+<or>
+@param device_uuid : "15ba3c25-8cdd-41f8-6f9e-fe49105dce0a"
+@param resource_uri : "/dimming
+@return json object
 {"n":"Dimming Control","dimmingSetting":100,"range":100,"step":10}
+
+<or>
+@param device_uuid : "15ba3c25-8cdd-41f8-6f9e-fe49105dce0a"
+@param resource_uri : "/EnergyConsumptionResURI
+@return json object
 {"n":"Energy Consumption","power":200.1,"energy":3500.4}
+
+<or>
+@param device_uuid : "15ba3c25-8cdd-41f8-6f9e-fe49105dce0a"
+@param resource_uri : "/ColourTemperatureResURI
+@return json object
 {"n":"Color Temperature", "ct":457, "range":1000, "step":1}
 
 // doPostResourceProperties(in String device_uuid, in String resource_uri, in String prop_data)
-Param : prop_data = { "power" : true, "level" : 100 } or { "value" : true } or { "dimmingSetting" : 50}
-
+@param device_uuid : "15ba3c25-8cdd-41f8-6f9e-fe49105dce0a"
+@param resource_uri : "/light"
+@param prop_data : { "value" : true }
+@return boolean : true or false
+<or>
+@param device_uuid : "15ba3c25-8cdd-41f8-6f9e-fe49105dce0a"
+@param resource_uri : "/dimming"
+@param prop_data : { "dimmingSetting" : 50}
+@return boolean : true or false
 
 // void onResultReceived(int result_code, String result_data)
-{"tid":"3481704581734918", "sn":"15ba3c25-8cdd-41f8-6f9e-fe49105dce0a", "uri":"/light", "res_type":"POST", "res_data":{"n":"Light Switch","value":false}}
+@param result code : 0-OK, 1-FAIL, 2-ERROR
+@param result_data :
+{"tid":"3481704581734918", "sn":"15ba3c25-8cdd-41f8-6f9e-fe49105dce0a", "uri":"/light", "res_type":"GET", "res_data":{"n":"Light Switch","value":false}}
+
+<or>
+{"tid":"3481704581734922", "sn":"15ba3c25-8cdd-41f8-6f9e-fe49105dce0a", "uri":"/light", "res_type":"POST", "res_data":{"n":"Light Switch","value":false}}
+
+<or>
+{"tid":"3481704581734922", "sn":"15ba3c25-8cdd-41f8-6f9e-fe49105dce0a", "uri":"/light", "res_type":"OBSERVE", "res_data":{"n":"Light Switch","value":false}}
+
+<or>
+{"tid":"3481704581734918", "sn":"15ba3c25-8cdd-41f8-6f9e-fe49105dce0a", "uri":"/dimming", "res_type":"GET", "res_data":{"n":"Dimming Control","dimmingSetting":100}}
+
+<or>
+{"tid":"3481704581734922", "sn":"15ba3c25-8cdd-41f8-6f9e-fe49105dce0a", "uri":"/dimming", "res_type":"POST", "res_data":{"n":"Light Switch","dimmingSetting":55}}

+ 0 - 36
app/src/main/aidl/com/icontrols/service/control/ILightControlService.aidl

@@ -68,41 +68,5 @@ interface ILightControlService {
      */
     boolean doPostResourceProperties(in String device_uuid, in String resource_uri, in String prop_data) ;
 
-    /**
-     * request Observing all properties of the resource to the Bridged device
-     * @param device_uuid unique identity of the device (eg. 15ba3c25-8cdd-41f8-6f9e-fe49105dce0a)
-     * @param resource_uri uri of ocf resource (eg. /a/light)
-     * @return
-     *   - true : function call success,
-     *   - false : function call fail
-     */
-    //boolean doObserveResource(in String device_uuid, in String resource_uri) ;
-
-    /**
-     * request Observing all properties of the resource to the Bridged device
-     * @param device_uuid unique identity of the device (eg. 15ba3c25-8cdd-41f8-6f9e-fe49105dce0a)
-     * @param resource_uri uri of ocf resource (eg. /a/light)
-     * @return
-     *   - true : function call success,
-     *   - false : function call fail
-     */
-    //boolean doStopObserveResource(in String device_uuid, in String resource_uri) ;
-
-    /**
-     * request Observing only device specific resources to the Bridged device
-     * @param device_uuid unique identity of the device (eg. 15ba3c25-8cdd-41f8-6f9e-fe49105dce0a)
-     * @return
-     *   - true : function call success,
-     *   - false : function call fail
-     */
-    //boolean doObserveDeviceSpecificResources(in String device_uuid) ;
 
-    /**
-     * request Observing only device specific resources to the Bridged device
-     * @param device_uuid unique identity of the device (eg. 15ba3c25-8cdd-41f8-6f9e-fe49105dce0a)
-     * @return
-     *   - true : function call success,
-     *   - false : function call fail
-     */
-    //boolean doStopObserveDeviceSpecificResources(in String device_uuid) ;
 }

+ 21 - 0
app/src/main/java/org/iotivity/bridge/homeserver/BridgeServer.java

@@ -22,6 +22,7 @@ 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;
@@ -33,8 +34,10 @@ import org.iotivity.oc.OcUtils;
 import org.iotivity.OCUuidUtil;
 import org.iotivity.OCUuid;
 import org.iotivity.OCVirtualDevice;
+import org.json.JSONObject;
 
 import java.util.ArrayList;
+import java.util.Properties;
 
 public class BridgeServer {
 
@@ -363,6 +366,24 @@ public class BridgeServer {
         return OCMain.isOwnedDevice(vod_index);
     }
 
+    public boolean addOrUpdateVirtualOCFDeviceProperties (String device_sn, String uri, String props) {
+        VirtualOCFDevice device = getVirtualOCFDevice(device_sn);
+        if(device != null) {
+            device.addProperties(uri, props);
+            return true ;
+        }
+        return false ;
+    }
+
+    public String getVirtualOCFDeviceProperties(String device_sn, String uri) {
+        VirtualOCFDevice device = getVirtualOCFDevice(device_sn);
+        if(device != null) {
+            return device.getProperties(uri);
+        }
+        return null ;
+    }
+
+
     /*
     private boolean checkExistVOD(String device_unique_id) {
         String device_uuid = existVirtualOCFDevice(devicename, econame);

+ 31 - 17
app/src/main/java/org/iotivity/bridge/homeserver/BridgeService.java

@@ -440,13 +440,13 @@ public class BridgeService extends IntentService {
                 JSONObject obj = new JSONObject(result_data);
                 if(obj != null) {
                     String tid = obj.getString("tid");              // Transaction Id
-                    String sn = obj.getString("sn");                // Serial Number (Device Id)
+                    String sn = obj.getString("sn");                // Serial Number (Virtual Device Id)
                     String uri = obj.getString("uri");              // Resource URI
                     String res_type = obj.getString("res_type");    // GET, POST, PUT
                     String res_data = obj.getString("res_data");    // Properties
 
-                    VirtualOCFDevice device = bridgeServer.getVirtualOCFDevice(sn);
-                    device.addProperties(uri, res_data);
+                    // Update Properties of the resource from result
+                    bridgeServer.addOrUpdateVirtualOCFDeviceProperties(sn, uri, res_data);
                 }
             } catch (JSONException e) {
                 Log.e(TAG, "Light Control Service Remote Error : ", e);
@@ -482,8 +482,8 @@ public class BridgeService extends IntentService {
         }
 
         @Override
-        public String retrieveAllResources(String device_uuid) throws RemoteException {
-            if(BridgeServer.LIGHT2_UUID.equalsIgnoreCase(device_uuid)) {
+        public String retrieveAllResources(String device_sn) throws RemoteException {
+            if(BridgeServer.LIGHT2_UUID.equalsIgnoreCase(device_sn)) {
                 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" +
@@ -493,16 +493,24 @@ public class BridgeService extends IntentService {
         }
 
         @Override
-        public String doGetResourceProperties(String device_uuid, String resource_uri) throws RemoteException {
-            if(BridgeServer.LIGHT2_UUID.equalsIgnoreCase(device_uuid)) {
+        public String doGetResourceProperties(String device_sn, String resource_uri) throws RemoteException {
+            if(BridgeServer.LIGHT2_UUID.equalsIgnoreCase(device_sn)) {
                     if("/light".equalsIgnoreCase(resource_uri)) {
-                        return "{\"n\":\"Light Switch\", \"value\":true}" ;
+                        String props = bridgeServer.getVirtualOCFDeviceProperties(device_sn, resource_uri) ;
+                        if(props != null) return props ;
+                        else return "{\"n\":\"Light Switch\", \"value\":true}" ;
                     } else if("/dimming".equalsIgnoreCase(resource_uri)) {
-                        return "{\"n\":\"Dimming Control\",\"dimmingSetting\":100,\"range\":100,\"step\":10}";
+                        String props = bridgeServer.getVirtualOCFDeviceProperties(device_sn, resource_uri) ;
+                        if(props != null) return props ;
+                        else return "{\"n\":\"Dimming Control\",\"dimmingSetting\":100,\"range\":100,\"step\":10}";
                     } else if("/EnergyConsumptionResURI".equalsIgnoreCase(resource_uri)) {
-                        return "{\"n\":\"Energy Consumption\",\"power\":200.1,\"energy\":3500.4}" ;
+                        String props = bridgeServer.getVirtualOCFDeviceProperties(device_sn, resource_uri) ;
+                        if(props != null) return props ;
+                        else return "{\"n\":\"Energy Consumption\",\"power\":200.1,\"energy\":3500.4}" ;
                     } else if("/ColourTemperatureResURI".equalsIgnoreCase(resource_uri)) {
-                        return "{\"n\":\"Color Temperature\", \"ct\":457, \"range\":1000, \"step\":1}" ;
+                        String props = bridgeServer.getVirtualOCFDeviceProperties(device_sn, resource_uri) ;
+                        if(props != null) return props ;
+                        else return "{\"n\":\"Color Temperature\", \"ct\":457, \"range\":1000, \"step\":1}" ;
                     }
             }
             return null;
@@ -535,9 +543,9 @@ public class BridgeService extends IntentService {
             return false;
         }
 
-        private String makeResultData(String device_uuid, String uri, String data) {
+        private String makeResultData(String device_sn, String uri, String data) {
             String res = "{\"tid\":\""+Utils.generateRandomID()+"\", " +
-                    "\"sn\":\""+device_uuid+"\", " +
+                    "\"sn\":\""+device_sn+"\", " +
                     "\"uri\":\""+uri+"\", " +
                     "\"res_type\":\"POST\", " +
                     "\"res_data\":"+data+"}";
@@ -565,9 +573,13 @@ public class BridgeService extends IntentService {
         }
     };
 
-    public String doGetLightControlResource(String device_uuid, String resource_uri) {
+    public String doGetLightControlResource(long device_index, String device_id, String resource_uri) {
         try {
-            String properties = lightBinder.doGetResourceProperties(device_uuid, resource_uri);
+            OCUuid piid = OCCoreRes.getDeviceInfo(device_index).getPiid();
+            String device_sn = OCUuidUtil.uuidToString(piid); // same with vod_id(Virtual Device Id) of VirtualOCFDevice
+
+            // doGetProperties with Light Control Service
+            String properties = lightBinder.doGetResourceProperties(device_sn, resource_uri);
             return properties ;
         } catch (RemoteException e) {
             Log.e(TAG, "Light Control Service Remote Error : ", e);
@@ -577,7 +589,7 @@ public class BridgeService extends IntentService {
 
     public void doGetLightControlResources() {
 
-        // TODO : doGetProperties with Light Control Service
+        Log.d(TAG, "SecheduledTaskInit : doGetLightControlResources() called.");
         if(bridgeServer != null && lightBinder != null) {
             ArrayList<VirtualOCFDevice> vods = bridgeServer.getVirtualOCFDeviceList();
             for (VirtualOCFDevice vod : vods) {
@@ -586,7 +598,9 @@ public class BridgeService extends IntentService {
                     String device_sn = vod.getVirtualDeviceId();
                     for (OCFDevice.Resource resource : vod.getResources()) {
                         try {
-                            lightBinder.doGetResourceProperties(device_sn, resource.getResourceUri());
+                            // doGetProperties with Light Control Service
+                            String properies = lightBinder.doGetResourceProperties(device_sn, resource.getResourceUri());
+                            bridgeServer.addOrUpdateVirtualOCFDeviceProperties(device_sn, resource.getResourceUri(), properies);
                         } catch (RemoteException e) {
                             Log.e(TAG, "Light Control Service Remote Error : ", e);
                         }

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

@@ -35,11 +35,14 @@ public class GetRequestHandler implements OCRequestHandler {
     public void handler(OCRequest request, int interfaces) {
         Log.d(TAG, "inside Get Request Handler");
 
-        OCUuid uuid = OCCoreRes.getDeviceId(request.getResource().getDevice());
+        long device_index = request.getResource().getDevice();
+        OCUuid uuid = OCCoreRes.getDeviceId(device_index);
         String device_uuid = OCUuidUtil.uuidToString(uuid);
         String resource_uri = request.getResource().getUri();
 
-        service.msg("Get "+resource_uri+" of "+device_uuid+" Request Received.");
+        service.msg("Get "+resource_uri+" of "+device_uuid+"("+device.getDeviceName()+") Request Received.");
+        String properies = service.doGetLightControlResource(device_index, device_uuid, resource_uri);
+        device.addProperties(resource_uri, properies);
 
         OcCborEncoder root = OcCborEncoder.createOcCborEncoder(OcCborEncoder.EncoderType.ROOT);
         switch (interfaces) {
@@ -55,7 +58,6 @@ public class GetRequestHandler implements OCRequestHandler {
                 // return current value/state of device
                 OCFDevice.Resource resource = device.getResource(request.getResource().getUri());
                 if(resource!=null) {
-                    service.msg("\t\t" + OCFDevice.RESOURCE_NAME_KEY + ": " + device.getDeviceName());
                     Properties properties = resource.getProperties();
                     Iterator<String> it = properties.stringPropertyNames().iterator();
                     while(it.hasNext()) {
@@ -75,7 +77,6 @@ public class GetRequestHandler implements OCRequestHandler {
                         }
                     }
                 }
-
                 break;
             default:
                 break;

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

@@ -40,7 +40,7 @@ public class PostRequestHandler implements OCRequestHandler {
         String device_id = OCUuidUtil.uuidToString(uuid);
         String resource_uri = request.getResource().getUri();
 
-        Log.d(TAG, "Post "+resource_uri+" of "+device_id+" Request Received.");
+        Log.d(TAG, "Post "+resource_uri+" of "+device_id+"("+device.getDeviceName()+") Request Received.");
         try {
 
             OcRepresentation rep = new OcRepresentation(request.getRequestPayload());

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

@@ -148,4 +148,17 @@ public class OCFDevice {
         }
     }
 
+    public String getProperties(String resource_uri) {
+        Resource resource = getResource(resource_uri);
+        if(resource!=null) {
+            Properties props = resource.getProperties();
+            if(props.size() == 0) return null ;
+            else {
+                JSONObject obj = new JSONObject(props);
+                return obj.toString();
+            }
+        }
+        return null ;
+    }
+
 }