/*
- * //******************************************************************
- * //
- * // Copyright 2015 Intel Corporation.
- * //
- * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- * //
- * // Licensed under the Apache License, Version 2.0 (the "License");
- * // you may not use this file except in compliance with the License.
- * // You may obtain a copy of the License at
- * //
- * // http://www.apache.org/licenses/LICENSE-2.0
- * //
- * // Unless required by applicable law or agreed to in writing, software
- * // distributed under the License is distributed on an "AS IS" BASIS,
- * // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * // See the License for the specific language governing permissions and
- * // limitations under the License.
- * //
- * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+ *******************************************************************
+ *
+ * Copyright 2015 Intel Corporation.
+ *
+ *-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
*/
package org.iotivity.base;
import org.iotivity.ca.CaInterface;
+import org.iotivity.base.BuildConfig;
import java.util.EnumSet;
import java.util.Iterator;
import java.util.List;
/**
- * Contains the main entrance/functionality of the product. To set a custom configuration, the
- * implementer must make a call to OcPlatform.Configure before the first usage of a function in this
- * class.
+ * This class contains the main entrance/functionality of the product. To set a custom
+ * configuration, the implementer must make a call to OcPlatform.Configure before the first usage
+ * of a method in this class.
*/
public final class OcPlatform {
System.loadLibrary("octbstack");
System.loadLibrary("connectivity_abstraction");
System.loadLibrary("oc");
+ if (0 != BuildConfig.SECURED)
+ {
+ System.loadLibrary("ocprovision");
+ }
System.loadLibrary("ocstack-jni");
}
*/
public static final String GROUP_INTERFACE = "oic.mi.grp";
- public static final String WELL_KNOWN_QUERY = "224.0.1.187:5683/oic/res";
- public static final String MULTICAST_PREFIX = "224.0.1.187:5683";
- public static final String MULTICAST_IP = "224.0.1.187";
- public static final int MULTICAST_PORT = 5683;
+ public static final String WELL_KNOWN_QUERY = "/oic/res";
+ public static final String WELL_KNOWN_DEVICE_QUERY = "/oic/d";
+ public static final String WELL_KNOWN_PLATFORM_QUERY = "/oic/p";
public static final int DEFAULT_PRESENCE_TTL = 60;
- public static final String DEVICE_URI = "/oic/d";
public static final String PRESENCE_URI = "/oic/ad";
private static volatile boolean sIsPlatformInitialized = false;
+ private static QualityOfService sPlatformQualityOfService = QualityOfService.NA;
private OcPlatform() {
}
/**
* API for setting the configuration of the OcPlatform.
+ * <p>
* Note: Any calls made to this AFTER the first call to OcPlatform.Configure will have no affect
+ * </p>
*
* @param platformConfig platform configuration
*/
public synchronized static void Configure(PlatformConfig platformConfig) {
if (!sIsPlatformInitialized) {
- CaInterface.initialize(platformConfig.getContext());
+ CaInterface.initialize(platformConfig.getActivity(), platformConfig.getContext());
+
+ sPlatformQualityOfService = platformConfig.getQualityOfService();
OcPlatform.configure(
platformConfig.getServiceType().getValue(),
/**
* API for notifying base that resource's attributes have changed.
+ * <p>
+ * Note: This API is for server side only.
+ * </p>
*
* @param ocResourceHandle resource handle of the resource
- * @throws OcException
+ * @throws OcException if failure
*/
public static void notifyAllObservers(
OcResourceHandle ocResourceHandle) throws OcException {
/**
* API for notifying base that resource's attributes have changed.
+ * <p>
+ * Note: This API is for server side only.
+ * </p>
*
* @param ocResourceHandle resource handle of the resource
* @param qualityOfService the quality of communication
- * @throws OcException
+ * @throws OcException if failure
*/
public static void notifyAllObservers(
OcResourceHandle ocResourceHandle,
/**
* API for notifying only specific clients that resource's attributes have changed.
+ * <p>
+ * Note: This API is for server side only.
+ * </p>
*
* @param ocResourceHandle resource handle of the resource
* @param ocObservationIdList These set of ids are ones which which will be notified upon
* resource change.
* @param ocResourceResponse OcResourceResponse object used by app to fill the response for
* this resource change
- * @throws OcException
+ * @throws OcException if failure
*/
public static void notifyListOfObservers(
OcResourceHandle ocResourceHandle,
/**
* API for notifying only specific clients that resource's attributes have changed.
+ * <p>
+ * Note: This API is for server side only.
+ * </p>
*
* @param ocResourceHandle resource handle of the resource
* @param ocObservationIdList These set of ids are ones which which will be notified upon
* @param ocResourceResponse OcResourceResponse object used by app to fill the response for
* this resource change
* @param qualityOfService the quality of communication
- * @throws OcException
+ * @throws OcException if failure
*/
public static void notifyListOfObservers(
OcResourceHandle ocResourceHandle,
int qualityOfService) throws OcException;
/**
- * API for Service and Resource Discovery. NOTE: This API applies to client side only
+ * API for Service and Resource Discovery
+ * <p>
+ * Note: This API is for client side only.
+ * </p>
*
- * @param host Host IP Address of a service to direct resource discovery query.
+ * @param host Host Address of a service to direct resource discovery query.
* If empty, performs multicast resource discovery query
* @param resourceUri name of the resource. If null or empty, performs search for all
* resource names
- * @param connectivityType a type of connectivity indicating the interface. Example: IPV4,
- * IPV6, ALL
+ * @param connectivityTypeSet Set of types of connectivity. Example: IP
* @param onResourceFoundListener Handles events, success states and failure states.
- * @throws OcException
+ * @throws OcException if failure
*/
public static void findResource(
String host,
OnResourceFoundListener onResourceFoundListener) throws OcException;
/**
- * API for Service and Resource Discovery. NOTE: This API applies to client side only
+ * API for Service and Resource Discovery.
+ * <p>
+ * Note: This API is for client side only.
+ * </p>
*
* @param host Host IP Address of a service to direct resource discovery query.
* If empty, performs multicast resource discovery query
* @param resourceUri name of the resource. If null or empty, performs search for all
* resource names
- * @param connectivityType a type of connectivity indicating the interface. Example: IPV4,
- * IPV6, ALL
+ * @param connectivityTypeSet Set of types of connectivity. Example: IP
* @param onResourceFoundListener Handles events, success states and failure states.
* @param qualityOfService the quality of communication
- * @throws OcException
+ * @throws OcException if failure
*/
public static void findResource(
String host,
*
* @param host Host IP Address. If null or empty, Multicast is performed.
* @param deviceUri Uri containing address to the virtual device
- * @param connectivityType a type of connectivity indicating the interface. Example: IPV4,
- * IPV6, ALL
+ * @param connectivityTypeSet Set of types of connectivity. Example: IP
* @param onDeviceFoundListener Handles events, success states and failure states.
- * @throws OcException
+ * @throws OcException if failure
*/
public static void getDeviceInfo(
String host,
*
* @param host Host IP Address. If null or empty, Multicast is performed.
* @param deviceUri Uri containing address to the virtual device
- * @param connectivityType a type of connectivity indicating the interface. Example: IPV4,
- * IPV6, ALL
+ * @param connectivityTypeSet Set of types of connectivity. Example: IP
* @param onDeviceFoundListener Handles events, success states and failure states.
* @param qualityOfService the quality of communication
- * @throws OcException
+ * @throws OcException if failure
*/
public static void getDeviceInfo(
String host,
*
* @param host Host IP Address. If null or empty, Multicast is performed.
* @param platformUri Uri containing address to the platform
- * @param connectivityType a type of connectivity indicating the interface. Example: IPV4,
- * IPV6, ALL
+ * @param connectivityTypeSet Set of types of connectivity. Example: IP
* @param onPlatformFoundListener Handles events, success states and failure states.
- * @throws OcException
+ * @throws OcException if failure
*/
public static void getPlatformInfo(
*
* @param host Host IP Address. If null or empty, Multicast is performed.
* @param platformUri Uri containing address to the platform
- * @param connectivityType a type of connectivity indicating the interface. Example: IPV4,
- * IPV6, ALL
+ * @param connectivityTypeSet Set of types of connectivity. Example: IP
* @param onPlatformFoundListener Handles events, success states and failure states.
* @param qualityOfService the quality of communication
- * @throws OcException
+ * @throws OcException if failure
*/
public static void getPlatformInfo(
int qualityOfService) throws OcException;
/**
- * This API registers a resource with the server NOTE: This API applies to server side only.
+ * This API registers a resource with the server
+ * <p/>
+ * Note: This API applies to server & client side.
+ * </P>
*
* @param ocResource The instance of OcResource with all data filled
* @return resource handle
- * @throws OcException
+ * @throws OcException if failure
*/
public static OcResourceHandle registerResource(
OcResource ocResource) throws OcException {
/**
* This API registers a resource with the server NOTE: This API applies to server side only.
+ * <p/>
+ * Note: This API applies to server side only.
+ * </P>
*
* @param resourceUri The URI of the resource. Example: "a/light"
* @param resourceTypeName The resource type. Example: "light"
* @param entityHandler entity handler.
* @param resourcePropertySet indicates the property of the resource
* @return resource handle
- * @throws OcException
+ * @throws OcException if failure
*/
public static OcResourceHandle registerResource(
String resourceUri,
* Register Device Info
*
* @param ocDeviceInfo object containing all the device specific information
- * @throws OcException
+ * @throws OcException if failure
*/
public static void registerDeviceInfo(
OcDeviceInfo ocDeviceInfo) throws OcException {
OcPlatform.initCheck();
OcPlatform.registerDeviceInfo0(
- ocDeviceInfo.getDeviceName()
+ ocDeviceInfo.getDeviceName(),
+ ocDeviceInfo.getDeviceTypes().toArray(
+ new String[ocDeviceInfo.getDeviceTypes().size()]
+ )
);
}
private static native void registerDeviceInfo0(
- String deviceName
+ String deviceName,
+ String[] deviceTypes
) throws OcException;
/**
* Register Platform Info
*
* @param ocPlatformInfo object containing all the platform specific information
- * @throws OcException
+ * @throws OcException if failure
*/
public static void registerPlatformInfo(
OcPlatformInfo ocPlatformInfo) throws OcException {
OcPlatform.initCheck();
OcPlatform.registerPlatformInfo0(
- ocPlatformInfo.getPlatformID(),
+ ocPlatformInfo.getPlatformId(),
ocPlatformInfo.getManufacturerName(),
ocPlatformInfo.getManufacturerUrl(),
ocPlatformInfo.getModelNumber(),
*
* @param ocResourceHandle This is the resource handle which we which to unregister from the
* server
- * @throws OcException
+ * @throws OcException if failure
*/
public static void unregisterResource(
OcResourceHandle ocResourceHandle) throws OcException {
*
* @param ocResourceCollectionHandle handle to the collection resource
* @param ocResourceHandle handle to resource to be added to the collection resource
- * @throws OcException
+ * @throws OcException if failure
*/
public static void bindResource(
OcResourceHandle ocResourceCollectionHandle,
* @param ocResourceCollectionHandle handle to the collection resource
* @param ocResourceHandleList reference to list of resource handles to be added to the
* collection resource
- * @throws OcException
+ * @throws OcException if failure
*/
public static void bindResources(
OcResourceHandle ocResourceCollectionHandle,
*
* @param ocResourceCollectionHandle handle to the collection resource
* @param ocResourceHandle resource handle to be unbound from the collection resource
- * @throws OcException
+ * @throws OcException if failure
*/
public static void unbindResource(
OcResourceHandle ocResourceCollectionHandle,
* @param ocResourceCollectionHandle Handle to the collection resource
* @param ocResourceHandleList List of resource handles to be unbound from the collection
* resource
- * @throws OcException
+ * @throws OcException if failure
*/
public static void unbindResources(
OcResourceHandle ocResourceCollectionHandle,
*
* @param ocResourceHandle handle to the resource
* @param resourceTypeName new typename to bind to the resource
- * @throws OcException
+ * @throws OcException if failure
*/
public static void bindTypeToResource(
OcResourceHandle ocResourceHandle,
*
* @param ocResourceHandle handle to the resource
* @param resourceInterfaceName new interface to bind to the resource
- * @throws OcException
+ * @throws OcException if failure
*/
public static void bindInterfaceToResource(
OcResourceHandle ocResourceHandle,
* Start Presence announcements.
*
* @param ttl time to live in seconds
- * @throws OcException
+ * @throws OcException if failure
*/
public static void startPresence(int ttl) throws OcException {
OcPlatform.initCheck();
/**
* Stop Presence announcements.
*
- * @throws OcException
+ * @throws OcException if failure
*/
public static void stopPresence() throws OcException {
OcPlatform.initCheck();
* Subscribes to a server's presence change events. By making this subscription, every time a
* server adds/removes/alters a resource, starts or is intentionally stopped
*
- * @param host The IP address/addressable name of the server to subscribe to
- * @param connectivityType a type of connectivity indicating the interface. Example: IPV4,
- * IPV6, ALL
- * @param onPresenceListener listener that will receive notifications/subscription events
+ * @param host The IP address/addressable name of the server to subscribe to
+ * @param connectivityTypeSet Set of types of connectivity. Example: IP
+ * @param onPresenceListener listener that will receive notifications/subscription events
* @return a handle object that can be used to identify this subscription request. It can be
* used to unsubscribe from these events in the future
- * @throws OcException
+ * @throws OcException if failure
*/
public static OcPresenceHandle subscribePresence(
String host,
* Subscribes to a server's presence change events. By making this subscription, every time a
* server adds/removes/alters a resource, starts or is intentionally stopped
*
- * @param host The IP address/addressable name of the server to subscribe to
- * @param resourceType a resource type specified as a filter for subscription events.
- * @param connectivityType a type of connectivity indicating the interface. Example: IPV4,
- * IPV6, ALL
- * @param onPresenceListener listener that will receive notifications/subscription events
+ * @param host The IP address/addressable name of the server to subscribe to
+ * @param resourceType a resource type specified as a filter for subscription events.
+ * @param connectivityTypeSet Set of types of connectivity. Example: IP
+ * @param onPresenceListener listener that will receive notifications/subscription events
* @return a handle object that can be used to identify this subscription request. It can be
* used to unsubscribe from these events in the future
- * @throws OcException
+ * @throws OcException if failure
*/
public static OcPresenceHandle subscribePresence(
String host,
*
* @param ocPresenceHandle the handle object provided by the subscribePresence call that
* identifies this subscription
- * @throws OcException
+ * @throws OcException if failure
*/
public static void unsubscribePresence(
OcPresenceHandle ocPresenceHandle) throws OcException {
* Additionally, you can only create this object if OcPlatform was initialized to be a Client
* or Client/Server.
*
- * @param host a string containing a resolvable host address of the server holding
- * the resource
- * @param uri the rest of the resource's URI that will permit messages to be
- * properly routed.
- * Example: /a/light
- * @param connectivityType a type of connectivity indicating the interface. Example: IPV4,
- * IPV6, ALL
- * @param isObservable a boolean containing whether the resource supports observation
- * @param resourceTypeList a collection of resource types implemented by the resource
- * @param interfaceList a collection of interfaces that the resource supports/implements
+ * @param host a string containing a resolvable host address of the server holding
+ * the resource
+ * @param uri the rest of the resource's URI that will permit messages to be
+ * properly routed.
+ * Example: /a/light
+ * @param connectivityTypeSet Set of types of connectivity. Example: IP
+ * @param isObservable a boolean containing whether the resource supports observation
+ * @param resourceTypeList a collection of resource types implemented by the resource
+ * @param interfaceList a collection of interfaces that the resource supports/implements
* @return new resource object
- * @throws OcException
+ * @throws OcException if failure
*/
public static OcResource constructResourceObject(
String host,
* Allows application entity handler to send response to an incoming request.
*
* @param ocResourceResponse resource response
- * @throws OcException
+ * @throws OcException if failure
*/
public static void sendResponse(OcResourceResponse ocResourceResponse)
throws OcException {
throws OcException;
/**
+ * Method to find all devices which are eligible for direct pairing and return the list.
+ *
+ * @param timeout timeout for discovering direct pair devices.
+ * @param FindDirectPairingListener Callback function, which will receive the list of direct
+ * pairable devices.
+ * @throws OcException
+ */
+ public static native void findDirectPairingDevices(int timeout,
+ FindDirectPairingListener onFindDirectPairingListener) throws OcException;
+
+ /**
+ * Method to get list of all paired devices for a given device.
+ *
+ * @param GetDirectPairedListener Callback function, which will receive the list of direct
+ * paired devices.
+ * @throws OcException
+ */
+ public native void getDirectPairedDevices(GetDirectPairedListener onGetDirectPairedListener)
+ throws OcException;
+
+ /**
+ * Method to perform direct pairing between two devices.
+ *
+ * @param peer Target peer
+ * @param prmType Pairing Method to be used for Pairing
+ * @param pin pin
+ * @param DirectPairingListener Callback function, which will be called after
+ * completion of direct pairing.
+ * @throws OcException
+ */
+ public static void doDirectPairing(
+ OcDirectPairDevice peer,
+ OcPrmType prmType,
+ String pin,
+ DirectPairingListener onDirectPairingListener) throws OcException {
+
+ OcPlatform.doDirectPairing0(
+ peer,
+ prmType.getValue(),
+ pin,
+ onDirectPairingListener
+ );
+ }
+
+ private static native void doDirectPairing0(OcDirectPairDevice peer,
+ int pmSel, String pinNumber, DirectPairingListener onDirectPairingListener)
+ throws OcException;
+
+ /**
+ * An FindDirectPairingListener can be registered via the OcPlatform.findDirectPairingDevices call.
+ * Event listeners are notified asynchronously
+ */
+ public interface FindDirectPairingListener {
+ public void onFindDirectPairingListener(List<OcDirectPairDevice> ocPairedDeviceList);
+ }
+
+ /**
+ * Listerner to Get List of already Direct Paired devices.
+ * An GetDirectPairedListener can be registered via the OcPlatform.getDirectPairedDevices call.
+ * Event listeners are notified asynchronously
+ */
+ public interface GetDirectPairedListener {
+ public void onGetDirectPairedListener(List<OcDirectPairDevice> ocPairedDeviceList);
+ }
+
+ /**
+ * Listner to get result of doDirectPairing.
+ * An DirectPairingListener can be registered via the OcPlatform.doDirectPairing call.
+ * Event listeners are notified asynchronously
+ */
+ public interface DirectPairingListener {
+ public void onDirectPairingListener(String devId, int result);
+ }
+
+ /**
* An OnResourceFoundListener can be registered via the OcPlatform.findResource call.
* Event listeners are notified asynchronously
*/
"OcPlatform.Configure before any other API calls are permitted");
}
}
+
+ /**
+ * Gets platform quality of service
+ *
+ * @return quality of service
+ */
+ public static QualityOfService getPlatformQualityOfService() {
+ OcPlatform.initCheck();
+ return sPlatformQualityOfService;
+ }
}