Explorar el Código

Bridged Client of Light Control is under implementing.

Trishia hace 4 años
padre
commit
0222a786d5

+ 1 - 1
app/build.gradle

@@ -32,7 +32,7 @@ android {
             enable true
             reset()
             include 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
-            universalApk false
+            universalApk true
         }
     }
 }

+ 14 - 12
app/src/main/java/org/iotivity/bridge/homeserver/BridgeServer.java

@@ -171,13 +171,13 @@ public class BridgeServer {
         return null ;
     }
 
-    public int addVirtualOCFDevice(String virtual_di, String device_type, String devicename, String econame) {
+    public VirtualOCFDevice addVirtualOCFDevice(String virtual_di, String device_type, String device_name, String eco_name) {
 
         // Add Virtual Device for Light
         OCUuid uuid = OCUuidUtil.stringToUuid(virtual_di);
         int vod_index = OCBridge.addVirtualDevice(uuid.getId(),
-                econame, "/oic/d", device_type,  // "oic.d.virtual" automatically added by internal api implements
-                devicename, "ocf.2.0.0", "ocf.res.1.3.0,ocf.sh.1.3.0",
+                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() {
@@ -188,7 +188,6 @@ public class BridgeServer {
         if (vod_index != 0) {
             Log.d(TAG, "VOD Index = " + vod_index + ", VOD Count = " + OCBridge.getVirtualDeviceCount());
 
-            light = new Light(devicename);
             OCDeviceInfo dev_info = OCCoreRes.getDeviceInfo(vod_index);
             OCVirtualDevice vod_info = OCBridge.getVirtualDeviceInfo(vod_index);
             Log.d(TAG, "VOD Info = " + vod_info);
@@ -200,8 +199,8 @@ public class BridgeServer {
 
 
                 // Add VOD Data
-                VirtualOCFDevice vod = new VirtualOCFDevice(vod_index, devicename, econame,
-                        OCUuidUtil.bytesToString(vod_info.getId()));
+                VirtualOCFDevice vod = new VirtualOCFDevice(vod_index, device_name, eco_name,
+                        OCUuidUtil.bytesToString(vod_info.getId()), device_type);
                 vod.setDiscovered(true);
                 vod.setAddedToBridge(true);
                 bridge.addOrReplaceVODList(vod);
@@ -216,17 +215,20 @@ public class BridgeServer {
                 // Add OCF Virtual Device IDD
                 //byte[] idd_bytes = Utils.getFileBytes("idds/virtual_ocf_device_light_IDD.cbor", activity); // example : "dummy_bridge_bridge_device_IDD.cbor"
                 //OCIntrospection.setIntrospectionData(vod_index, idd_bytes);
+
+                return vod ;
             }
         }
-        return vod_index ;
+        return null ;
     }
 
-    public void addVirtualDeviceResource(int vod_index, OCFDevice device, String resource_name, String resource_uri, String resource_type, String interfaces) {
+    public void addVirtualDeviceResource(VirtualOCFDevice device, String resource_name, String resource_uri, String resource_type, String resource_if) {
 
-        int interfaceMask = Utils.interfacesStringToMask(interfaces);
+        device.addResource(resource_name, resource_uri, resource_type, resource_if);
+        int interfaceMask = Utils.interfacesStringToMask(resource_if);
 
         // Add Device Resource and Handler
-        OCResource resource = OCMain.newResource(resource_name, resource_uri, (short)1, (long)vod_index);
+        OCResource resource = OCMain.newResource(resource_name, resource_uri, (short)1, (long)device.getVODIndex());
         OCMain.resourceBindResourceType(resource, resource_type);
         OCMain.resourceBindResourceInterface(resource, interfaceMask);
         OCMain.resourceSetDefaultInterface(resource, interfaceMask);
@@ -270,7 +272,7 @@ public class BridgeServer {
 
                 // Add VOD Data
                 VirtualOCFDevice vod = new VirtualOCFDevice(vod_index, devicename, econame,
-                        OCUuidUtil.bytesToString(vod_info.getId()));
+                        OCUuidUtil.bytesToString(vod_info.getId()), "oic.d.light");
                 vod.setDiscovered(true);
                 vod.setAddedToBridge(true);
                 bridge.addOrReplaceVODList(vod);
@@ -355,7 +357,7 @@ public class BridgeServer {
 
                 // Add VOD Data
                 VirtualOCFDevice vod = new VirtualOCFDevice(vod_index, dev_info.getName(), vod_client.getEconame(),
-                        OCUuidUtil.bytesToString(vod_client.getId()));
+                        OCUuidUtil.bytesToString(vod_client.getId()), "oic.d.virtualclient");
                 vod.setDiscovered(true);
                 vod.setAddedToBridge(true);
                 bridge.addOrReplaceVODList(vod);

+ 1 - 0
app/src/main/java/org/iotivity/bridge/homeserver/BridgeServerActivity.java

@@ -341,6 +341,7 @@ public class BridgeServerActivity extends AppCompatActivity {
                 resebridgeDialog.show();
                 return true;
             }
+
             case R.id.action_vods_reset:
                 // TODO : do some action like start Activity or show Dialog
                 {

+ 25 - 4
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.VirtualOCFDevice;
 import org.iotivity.bridge.homeserver.utils.Utils;
 import org.iotivity.oc.OcCborEncoder;
 import org.iotivity.oc.OcRemoteDevice;
@@ -306,6 +307,8 @@ public class BridgeService extends IntentService {
 
     class LightControlServiceConnection implements ServiceConnection {
 
+        public static final String ECO_NAME = "rs-485" ;
+
         @Override
         public void onServiceConnected(ComponentName name, IBinder service) {
 
@@ -344,6 +347,8 @@ public class BridgeService extends IntentService {
                                     Log.d(TAG, "Light Control : state = " + state);
                                 }
                             }
+                            // add device on ocf platform
+                            VirtualOCFDevice device = bridgeServer.addVirtualOCFDevice(sn, n, rt, ECO_NAME);
 
                             String resources = lightControlBinder.retrieveAllResources(sn);
                             Log.d(TAG, "Light Control retrieveAllResources() : " + resources);
@@ -371,16 +376,17 @@ public class BridgeService extends IntentService {
                                             Log.d(TAG, "Light Resource : if = " + rIF);
                                         }
                                     }
+                                    // add resource on the device
+                                    bridgeServer.addVirtualDeviceResource(device, rName, rUri, rRT, rIF);
+                                    Log.d(TAG, "Light Control doGetResourceProperties("+sn+", "+rUri+") : "+lightControlBinder.doGetResourceProperties(sn, rUri));
+
                                 }
                             }
                         }
-
-
                         //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);
@@ -392,7 +398,6 @@ public class BridgeService extends IntentService {
 
                 msg( "Light Control Remote Service Connected");
                 printLine();
-
             }
         }
 
@@ -419,6 +424,22 @@ public class BridgeService extends IntentService {
         public void onResultReceived(int result_code, String result_data) throws RemoteException {
             msg("result_code="+result_code + ", result_data="+result_data );
             printLine();
+
+            try {
+                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 uri = obj.getString("uri");              // Resource URI
+                    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));
+
+                }
+            } catch (JSONException e) {
+                Log.e(TAG, "Light Control Service Remote Error : ", e);
+            }
         }
     };
 

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

@@ -51,9 +51,8 @@ public class GetRequestHandler implements OCRequestHandler {
             case OCInterfaceMask.RW:
             case OCInterfaceMask.S:
             case OCInterfaceMask.A:
-                // TODO : doGetProperties with Light Control Service
-                service.doGetDeviceResource(device_uuid, resource_uri);
 
+                // 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());
@@ -74,6 +73,8 @@ public class GetRequestHandler implements OCRequestHandler {
                         }
                     }
                 }
+                // TODO : doGetProperties with Light Control Service
+                service.doGetDeviceResource(device_uuid, resource_uri);
                 break;
             default:
                 break;

+ 5 - 19
app/src/main/java/org/iotivity/bridge/homeserver/model/OCFDevice.java

@@ -8,7 +8,6 @@ public class OCFDevice {
 
     // device key name
     static public final String NAME_KEY = "n";
-    static public final String ECONAME_KEY = "econame";
     static public final String DI_KEY = "di";
 
     // resource key name
@@ -16,10 +15,10 @@ public class OCFDevice {
     static public final String RESOURCE_INTERFACE_KEY = "if" ;
     static public final String RESOURCE_TYPE_KEY = "rt" ;
 
-    private String device_name ;
-    private String device_type ;
-    private String device_id ;
-    private ArrayList<Resource> resources = new ArrayList<Resource>() ;
+    protected String device_name ;
+    protected String device_type ;
+
+    protected ArrayList<Resource> resources = new ArrayList<Resource>() ;
 
     public class Resource {
 
@@ -72,16 +71,10 @@ public class OCFDevice {
         }
     };
 
-    public OCFDevice(String device_name) {
-
-        this.device_name = device_name;
-    }
-
-    public OCFDevice(String device_name, String device_type, String device_id) {
+    public OCFDevice(String device_name, String device_type) {
 
         this.device_name = device_name ;
         this.device_type = device_type ;
-        this.device_id = device_id ;
     }
 
     public String getDeviceName() {
@@ -98,13 +91,6 @@ public class OCFDevice {
         this.device_type = device_type;
     }
 
-    public String getDeviceId() {
-        return device_id;
-    }
-    public void setDeviceId(String device_id) {
-        this.device_id = device_id;
-    }
-
     public ArrayList<Resource> getResources() {
         return resources;
     }

+ 18 - 25
app/src/main/java/org/iotivity/bridge/homeserver/model/VirtualOCFDevice.java

@@ -6,41 +6,34 @@ import org.iotivity.oc.OcRepresentation;
 import java.util.ArrayList;
 import java.util.List;
 
-public class VirtualOCFDevice {
+public class VirtualOCFDevice extends OCFDevice {
 
     // Virtual OCF Device (VOD) resource names
-    static public final String NAME_KEY = "n";
     static public final String ECONAME_KEY = "econame";
-    static public final String DI_KEY = "di";
 
     // Virtual OCF Device variables
-    private String name;
-    private String econame;
-    private String di ;
+    private String vod_id ;
+    private int vod_index ;
+    private String econame ;
+
     private boolean discovered ;
     private boolean added_to_bridge ;
     private boolean isOwned ;
-    private int index ;
 
-    public VirtualOCFDevice(int vod_index, String name, String econame, String virtual_di) {
-        this.index = vod_index;
-        this.name = name;
+
+    public VirtualOCFDevice(int vod_index, String name, String econame, String virtual_di, String type) {
+        super(name, type);
+
+        this.vod_index = vod_index;
         this.econame = econame ;
-        this.di = virtual_di ;
+        this.vod_id = virtual_di ;
     }
 
     public int getVODIndex() {
-        return index;
+        return vod_index;
     }
     public void setVODIndex(int vod_index) {
-        this.index = vod_index;
-    }
-
-    public String getName() {
-        return name;
-    }
-    public void setName(String name) {
-        this.name = name;
+        this.vod_index = vod_index;
     }
 
     public String getEcoName() {
@@ -51,10 +44,10 @@ public class VirtualOCFDevice {
     }
 
     public String getVirtualDeviceId() {
-        return di;
+        return vod_id;
     }
     public void setVirtualDeviceId(String di) {
-        this.di = di;
+        this.vod_id = di;
     }
 
     public boolean isDiscovered() {
@@ -81,10 +74,10 @@ public class VirtualOCFDevice {
     @Override
     public String toString() {
         StringBuffer sb = new StringBuffer();
-        sb.append("VOD ["+index+"]");
-        sb.append(", name="+name);
+        sb.append("VOD ["+vod_index+"]");
+        sb.append(", name="+device_name);
         sb.append(", econame="+econame);
-        sb.append(", vod_di="+di);
+        sb.append(", vod_id="+vod_id);
         sb.append(", isDiscoverd="+discovered);
         sb.append(", addedToBridge="+added_to_bridge);
         sb.append(", isOwned="+isOwned);

+ 18 - 18
app/src/main/res/menu/actionbar_actions.xml

@@ -4,30 +4,30 @@
 
     <item
         android:id="@+id/action_bridge_reset"
-        android:title="Reset Bridge"
+        android:title="@string/resetBridge"
         app:showAsAction="never"/>
 
 
-    <item
-        android:id="@+id/action_vods_reset"
-        android:title="Reset VODs"
-        app:showAsAction="never"/>
-
-    <item
-        android:id="@+id/action_bridgeservice_stop"
-        android:title="Stop Bridge Service"
-        app:showAsAction="never"/>
+        <item
+            android:id="@+id/action_vods_reset"
+            android:title="@string/resetVods"
+            app:showAsAction="never"/>
 
-<!--
         <item
-            android:id="@+id/action_settings"
-            android:title="Settings"
+            android:id="@+id/action_bridgeservice_stop"
+            android:title="@string/stopBridgeService"
             app:showAsAction="never"/>
 
+    <!--
+                <item
+                    android:id="@+id/action_settings"
+                    android:title="Settings"
+                    app:showAsAction="never"/>
 
-        <item
-            android:id="@+id/action_search"
-            android:icon="@drawable/ic_search_white_48dp"
-            android:title="Search"
-            app:showAsAction="ifRoom"/>-->
+
+                <item
+                    android:id="@+id/action_search"
+                    android:icon="@drawable/ic_search_white_48dp"
+                    android:title="Search"
+                    app:showAsAction="ifRoom"/>-->
 </menu>

+ 3 - 1
app/src/main/res/values/strings.xml

@@ -5,8 +5,10 @@
     <!-- Client Strings -->
     <string name="discoverDevices">Discover Devices</string>
     <string name="discoveredResources">Discovered Resources</string>
-    <string name="resetBridge">Reset Bridge </string>
+    <string name="resetBridge">Reset Bridge</string>
     <string name="resetBridgeMessage">Note: This Bridge including SVRs will be reset.</string>
+    <!--<string name="resetBridge">Reset </string>
+    <string name="resetBridgeMessage">Note: This Client including SVRs will be reset.</string>-->
     <string name="resetVods">Reset Vods</string>
     <string name="resetVodsMessage">Note: All virtual OCF devices will be reset.</string>
     <string name="stopBridgeService">Stop Bridge Service</string>