OCStackResult CreateProvisioningResource(bool isSecured) { gProvResource.ps = ES_PS_NEED_PROVISIONING; gProvResource.tr = ES_PS_TRIGGER_INIT_VALUE; gProvResource.tnt = CT_ADAPTER_IP; OICStrcpy(gProvResource.tnn, sizeof(gProvResource.tnn), "Unknown"); OICStrcpy(gProvResource.cd, sizeof(gProvResource.cd), "Unknown"); OCStackResult res = OC_STACK_ERROR; if (isSecured) { res = OCCreateResource(&gProvResource.handle, OC_RSRVD_ES_PROV_RES_TYPE, OC_RSRVD_INTERFACE_DEFAULT, OC_RSRVD_ES_URI_PROV, OCEntityHandlerCb, NULL, OC_DISCOVERABLE | OC_OBSERVABLE | OC_SECURE); } else { res = OCCreateResource(&gProvResource.handle, OC_RSRVD_ES_PROV_RES_TYPE, OC_RSRVD_INTERFACE_DEFAULT, OC_RSRVD_ES_URI_PROV, OCEntityHandlerCb, NULL, OC_DISCOVERABLE | OC_OBSERVABLE); } OIC_LOG_V(INFO, ES_RH_TAG, "Created Prov resource with result: %s", getResult(res)); return res; }
OCStackResult registerLocalResources() { std::string resourceURI_thermostat = "/a/thermostat"; std::string resourceTypeName_thermostat = "core.thermostat"; std::string resourceURI_light = "/a/light"; std::string resourceTypeName_light = "core.light"; std::string resourceInterface = OC_RSRVD_INTERFACE_DEFAULT; uint8_t resourceProperty = OC_DISCOVERABLE; OCStackResult result = OCCreateResource(&handles[0], resourceTypeName_thermostat.c_str(), resourceInterface.c_str(), resourceURI_thermostat.c_str(), NULL, NULL, resourceProperty); if (OC_STACK_OK != result) { return result; } result = OCCreateResource(&handles[1], resourceTypeName_light.c_str(), resourceInterface.c_str(), resourceURI_light.c_str(), NULL, NULL, resourceProperty); return result; }
OCStackResult InProcServerWrapper::registerResource( OCResourceHandle& resourceHandle, std::string& resourceURI, const std::string& resourceTypeName, const std::string& resourceInterface, EntityHandler& eHandler, uint8_t resourceProperties) { OCStackResult result = OC_STACK_ERROR; auto cLock = m_csdkLock.lock(); if(cLock) { std::lock_guard<std::recursive_mutex> lock(*cLock); if(NULL != eHandler) { result = OCCreateResource(&resourceHandle, // OCResourceHandle *handle resourceTypeName.c_str(), // const char * resourceTypeName resourceInterface.c_str(), //const char * resourceInterfaceName //TODO fix this resourceURI.c_str(), // const char * uri EntityHandlerWrapper, // OCEntityHandler entityHandler NULL, resourceProperties // uint8_t resourceProperties ); } else { result = OCCreateResource(&resourceHandle, // OCResourceHandle *handle resourceTypeName.c_str(), // const char * resourceTypeName resourceInterface.c_str(), //const char * resourceInterfaceName //TODO fix this resourceURI.c_str(), // const char * uri NULL, // OCEntityHandler entityHandler NULL, resourceProperties // uint8_t resourceProperties ); } if(result != OC_STACK_OK) { resourceHandle = (OCResourceHandle) 0; } else { std::lock_guard<std::mutex> lock(OC::details::serverWrapperLock); OC::details::entityHandlerMap[resourceHandle] = eHandler; OC::details::resourceUriMap[resourceHandle] = resourceURI; } } else { result = OC_STACK_ERROR; } return result; }
void createResources() { light.state = false; OCResourceHandle fan; OCStackResult res = OCCreateResource(&fan, "core.fan", "oc.mi.def", "/a/fan", OCEntityHandlerFanCb, OC_DISCOVERABLE|OC_OBSERVABLE); OC_LOG_V(INFO, TAG, "Created fan resource with result: %s", getResult(res)); OCResourceHandle light; res = OCCreateResource(&light, "core.light", "oc.mi.def", "/a/light", OCEntityHandlerLightCb, OC_DISCOVERABLE|OC_OBSERVABLE); OC_LOG_V(INFO, TAG, "Created light resource with result: %s", getResult(res)); OCResourceHandle room; if(TEST == TEST_APP_COLL_EH) { res = OCCreateResource(&room, "core.room", "oc.mi.b", "/a/room", OCEntityHandlerRoomCb, OC_DISCOVERABLE); } else { res = OCCreateResource(&room, "core.room", "oc.mi.b", "/a/room", NULL, OC_DISCOVERABLE); } OC_LOG_V(INFO, TAG, "Created room resource with result: %s", getResult(res)); OCBindResourceInterfaceToResource(room, "oc.mi.ll"); OCBindResourceInterfaceToResource(room, "oc.mi.def"); res = OCBindResource(room, light); OC_LOG_V(INFO, TAG, "OC Bind Contained Resource to resource: %s", getResult(res)); res = OCBindResource(room, fan); OC_LOG_V(INFO, TAG, "OC Bind Contained Resource to resource: %s", getResult(res)); }
void piNewResourceCB(PIPluginBase * p_plugin, PIResourceBase * r_newResource) { if (!p_plugin || !r_newResource) { return; } r_newResource->piResource.resourceProperties = OC_DISCOVERABLE | OC_OBSERVABLE; OCStackResult result = OCCreateResource(&r_newResource->piResource.resourceHandle, r_newResource->piResource.resourceTypeName, r_newResource->piResource.resourceInterfaceName, r_newResource->piResource.uri, PluginInterfaceEntityHandler, (void *) p_plugin, r_newResource->piResource.resourceProperties); if (result != OC_STACK_OK) { OICFree (r_newResource->piResource.uri); OICFree (r_newResource); return; } OIC_LOG_V(INFO, TAG, "Created resource of type: %s\n", r_newResource->piResource.resourceTypeName); result = AddResourceToPlugin(p_plugin, r_newResource); }
OCStackResult CreateNetworkResource() { NetworkInfo netInfo; if (getCurrentNetworkInfo(CT_ADAPTER_IP, &netInfo) != ES_OK) { return OC_STACK_ERROR; } if (netInfo.type != CT_ADAPTER_IP) { return OC_STACK_ERROR; } g_net.cnt = (int) netInfo.type; g_net.ant[0] = (int) CT_ADAPTER_IP; sprintf(g_net.ipaddr, "%d.%d.%d.%d", netInfo.ipaddr[0], netInfo.ipaddr[1], netInfo.ipaddr[2], netInfo.ipaddr[3]); sprintf(g_net.cnn, "%s", netInfo.ssid); OC_LOG_V(INFO, ES_RH_TAG, "SSID: %s", g_net.cnn); OC_LOG_V(INFO, ES_RH_TAG, "IP Address: %s", g_net.ipaddr); OCStackResult res = OCCreateResource(&g_net.handle, "oic.r.net", OC_RSRVD_INTERFACE_DEFAULT, OC_RSRVD_ES_URI_NET, OCEntityHandlerCb,NULL, OC_DISCOVERABLE | OC_OBSERVABLE); OC_LOG_V(INFO, ES_RH_TAG, "Created Net resource with result: %s", getResult(res)); return res; }
struct things_resource_s *create_resource(struct things_server_builder_s *builder, char *uri, char *type, char *interface, int isDiscoverable, int isObserable, int isSecure) { things_resource_s *res = NULL; OCResourceHandle hd = NULL; uint8_t rsc_properties = OC_DISCOVERABLE; if (builder->handler == NULL) { THINGS_LOG_E(TAG, "Handler for serverbuilder is not registered"); return res; } if (1 != isDiscoverable) { rsc_properties = OC_ACTIVE; } if (1 == isObserable) { rsc_properties |= OC_OBSERVABLE; } if (1 == isSecure) { #ifdef __SECURED__ rsc_properties |= OC_SECURE; #else THINGS_LOG_D(TAG, "Stack is in UNSECURED Mode"); #endif } iotivity_api_lock(); OCStackResult ret = OCCreateResource(&hd, type, interface, uri, builder->handler, NULL, rsc_properties); iotivity_api_unlock(); if (ret != OC_STACK_OK) { THINGS_LOG_V(TAG, "Resource Creation Failed - ret = %d, %s", ret, uri); return NULL; } res = things_create_resource_inst(NULL, hd, NULL, NULL); if (NULL == res) { THINGS_LOG_E(TAG, "things_create_resource_inst is failed"); return res; } res->res_type = things_strdup(type); builder->gres_arr[builder->res_num++] = res; THINGS_LOG_D(TAG, "Created hd [%x], prop [0x%X] uri : %s", res->resource_handle, rsc_properties, res->uri); THINGS_LOG_D(TAG, "DISCOVERABLE : %s", (isDiscoverable == 1 ? "YES" : "NO")); THINGS_LOG_D(TAG, "OBSERABLE : %s", (isObserable == 1 ? "YES" : "NO")); THINGS_LOG_D(TAG, "SECURE : %s", (isSecure == 1 ? "YES" : "NO")); return res; }
OCStackResult createLightResource() { Light.power = false; OCStackResult res = OCCreateResource(&Light.handle, "core.light", "core.rw", "/a/light", 0, NULL, OC_DISCOVERABLE|OC_OBSERVABLE); return res; }
void createLightResource() { Light.state = false; OCStackResult res = OCCreateResource(&Light.handle, "core.light", "oc.mi.def", "/a/light", OCEntityHandlerCb, OC_DISCOVERABLE|OC_OBSERVABLE); OC_LOG_V(INFO, TAG, "Created Light resource with result: %s", getResult(res)); }
void createResource() { OCStackResult res = OCCreateResource(&m_handle, "SSManager.Sensor", "oc.mi.def", "/Tracker_Thing", OCEntityHandlerCb, OC_DISCOVERABLE | OC_OBSERVABLE); OC_LOG_V(INFO, TAG, "Created PROXI resource with result: %s", getResult(res)); }
void createLightResource() { Light.state = false; OCStackResult res = OCCreateResource(&Light.handle, "core.light", OC_RSRVD_INTERFACE_DEFAULT, "/a/light", OCEntityHandlerCb, NULL, OC_DISCOVERABLE|OC_OBSERVABLE); OC_LOG_V(INFO, TAG, "Created Light resource with result: %s", getResult(res)); }
void createTHResource() { TH.m_humid = 0; TH.m_temp = 0; OCStackResult res = OCCreateResource(&TH.m_handle, "SoftSensorManager.Sensor", "oc.mi.def", "/Thing_TempHumSensor1", OCEntityHandlerCb, OC_DISCOVERABLE | OC_OBSERVABLE); OC_LOG_V(INFO, TAG, "Created TH resource with result: %s", getResult(res)); }
void createTHResource() { TH.m_humid = 0; TH.m_temp = 0; OCStackResult res = OCCreateResource(&TH.m_handle, "SSManager.Sensor", OC_RSRVD_INTERFACE_DEFAULT, "/Thing_TempHumSensor", OCEntityHandlerCb, OC_DISCOVERABLE | OC_OBSERVABLE); OC_LOG_V(INFO, TAG, "Created TH resource with result: %s", getResult(res)); }
OCStackResult CreateProvisioningResource() { g_prov.ps = 1; // need to provisioning g_prov.tnt = CT_ADAPTER_IP; sprintf(g_prov.tnn, "Unknown"); sprintf(g_prov.cd, "Unknown"); OCStackResult res = OCCreateResource(&g_prov.handle, "oic.r.prov", OC_RSRVD_INTERFACE_DEFAULT, OC_RSRVD_ES_URI_PROV, OCEntityHandlerCb, NULL, OC_DISCOVERABLE | OC_OBSERVABLE); OC_LOG_V(INFO, ES_RH_TAG, "Created Prov resource with result: %s", getResult(res)); return res; }
void *presenceNotificationGenerator(void *param) { sleep(5); (void)param; OCDoHandle presenceNotificationHandles[numPresenceResources]; OCStackResult res = OC_STACK_OK; std::array<std::string, numPresenceResources> presenceNotificationResources { { std::string("core.fan"), std::string("core.led") } }; std::array<std::string, numPresenceResources> presenceNotificationUris { { std::string("/a/fan"), std::string("/a/led") } }; for(int i=0; i<numPresenceResources; i++) { if(res == OC_STACK_OK) { sleep(1); res = OCCreateResource(&presenceNotificationHandles[i], presenceNotificationResources.at(i).c_str(), "oc.mi.def", presenceNotificationUris.at(i).c_str(), OCNOPEntityHandlerCb, OC_DISCOVERABLE|OC_OBSERVABLE); } if(res != OC_STACK_OK) { OC_LOG_V(ERROR, TAG, "\"Presence Notification Generator\" failed to create resource " "%s with result %s.", presenceNotificationResources.at(i).c_str(), getResult(res)); break; } } sleep(5); for(int i=0; i<numPresenceResources; i++) { if(res == OC_STACK_OK) { res = OCDeleteResource(presenceNotificationHandles[i]); } if(res != OC_STACK_OK) { OC_LOG_V(ERROR, TAG, "\"Presence Notification Generator\" failed to delete "\ "resource %s.", presenceNotificationResources.at(i).c_str()); break; } } return NULL; }
struct things_resource_s *create_collection_resource(struct things_server_builder_s *builder, char *uri, char *type) { things_resource_s *res = NULL; OCResourceHandle hd = NULL; uint8_t rsc_properties = OC_DISCOVERABLE | OC_OBSERVABLE; if (builder->handler == NULL) { THINGS_LOG_E(TAG, "Handler for serverbuilder is not registered"); return res; } #ifdef __SECURED__ rsc_properties |= OC_SECURE; #endif //#ifdef __SECURED__ iotivity_api_lock(); OCStackResult ret = OCCreateResource(&hd, type, OIC_INTERFACE_LINKEDLIST, uri, builder->handler, NULL, rsc_properties); if (ret != OC_STACK_OK) { THINGS_LOG_V(TAG, "Resource Creation Failed - ret = %d, %s", ret, uri); iotivity_api_unlock(); return NULL; } OCBindResourceTypeToResource(hd, OIC_RTYPE_COLLECTION_WK); OCBindResourceInterfaceToResource(hd, OIC_INTERFACE_BATCH); iotivity_api_unlock(); res = things_create_resource_inst(NULL, hd, NULL, NULL); if (NULL == res) { THINGS_LOG_E(TAG, "things_create_resource_inst is failed"); return res; } res->res_type = things_strdup(type); builder->gres_arr[builder->res_num++] = res; THINGS_LOG_V(TAG, "Created hd [%x], prop [0x%X] uri : %s", res->resource_handle, rsc_properties, uri); return res; }
/** * This internal method is used to create '/oic/sec/pstat' resource. */ OCStackResult CreatePstatResource() { OCStackResult ret = OCCreateResource(&gPstatHandle, OIC_RSRC_TYPE_SEC_PSTAT, OIC_MI_DEF, OIC_RSRC_PSTAT_URI, PstatEntityHandler, NULL, OC_RES_PROP_NONE); if (OC_STACK_OK != ret) { OIC_LOG(FATAL, TAG, "Unable to instantiate pstat resource"); DeInitPstatResource(); } return ret; }
int createLightResource (char *uri, LightResource *lightResource) { if (!uri) { printf ("Resource URI cannot be NULL\n"); return -1; } lightResource->state = false; lightResource->power = 0; OCStackResult res = OCCreateResource(&(lightResource->handle), "core.light", "oc.mi.def", uri, OCEntityHandlerCb, OC_DISCOVERABLE|OC_OBSERVABLE); return 0; }
/* * This internal method is used to create '/oic/sec/doxm' resource. */ OCStackResult CreateDoxmResource() { OCStackResult ret; ret = OCCreateResource(&gDoxmHandle, OIC_RSRC_TYPE_SEC_DOXM, OIC_MI_DEF, OIC_RSRC_DOXM_URI, DoxmEntityHandler, NULL, OC_OBSERVABLE | OC_SECURE | OC_EXPLICIT_DISCOVERABLE); if (OC_STACK_OK != ret) { OIC_LOG (FATAL, TAG, "Unable to instantiate Doxm resource"); DeInitDoxmResource(); } return ret; }
/** * CreateLightResource creates a new light resource by calling the OCCreateResource() method. * @param uri [IN] uri * @param lightResource [IN] info of resource * @return ::OC_STACK_OK on success, some other value upon failure. */ int createLightResource (const char *uri, LightResource *lightResource) { if (!uri) { OIC_LOG(ERROR, TAG, "Resource URI cannot be NULL"); } lightResource->brightness = 0; OCStackResult res = OCCreateResource(&(lightResource->handle), "core.light", OC_RSRVD_INTERFACE_DEFAULT, uri, OCEntityHandlerCb, NULL, OC_DISCOVERABLE|OC_OBSERVABLE | OC_SECURE); OIC_LOG_V(INFO, TAG, "Created Light resource with result: %s", getResult(res)); return 0; }
int createLEDResource (char *uri, LEDResource *ledResource, bool resourceState, int resourcePower) { if (!uri) { OC_LOG(ERROR, TAG, "Resource URI cannot be NULL"); return -1; } ledResource->state = resourceState; ledResource->power= resourcePower; OCStackResult res = OCCreateResource(&(ledResource->handle), "core.led", "oc.mi.def", uri, OCEntityHandlerCb, OC_DISCOVERABLE|OC_OBSERVABLE); OC_LOG_V(INFO, TAG, "Created LED resource with result: %s", getResult(res)); return 0; }
int createLightResource (char *uri, LightResource *lightResource) { if (!uri) { OC_LOG(ERROR, TAG, "Resource URI cannot be NULL"); return -1; } lightResource->state = false; lightResource->power= 0; OCStackResult res = OCCreateResource(&(lightResource->handle), "core.light", "oc.mi.def", uri, OCEntityHandlerCb, OC_DISCOVERABLE|OC_OBSERVABLE); OC_LOG_V(INFO, TAG, "Created Light resource with result: %s", getResult(res)); return 0; }
OCStackResult CreateKeepAliveResource() { OIC_LOG(DEBUG, TAG, "InitKeepAliveResource IN"); // Create a KeepAlive resource OCStackResult result = OCCreateResource(&g_keepAliveHandle, KEEPALIVE_RESOURCE_TYPE_NAME, KEEPALIVE_RESOURCE_INTF_NAME, KEEPALIVE_RESOURCE_URI, NULL, NULL, OC_DISCOVERABLE); if (OC_STACK_OK != result) { OIC_LOG_V(ERROR, TAG, "Create resource for KeepAlive failed[%d]", result); } OIC_LOG(DEBUG, TAG, "InitKeepAliveResource OUT"); return result; }
void createFanResource() { OCStackResult ret = OCCreateResource(&Fan.handle, "com.intel", "oc.mi.def", "/a/fan", OCEntityHandlerCb, OC_DISCOVERABLE | OC_OBSERVABLE); if (ret != OC_STACK_OK) { OC_LOG(ERROR, TAG, "Created Fan resource error"); return; } Serial.println("Fan resource created"); ret = registerFanResource(); if (ret != OC_STACK_OK) { Serial.println("Register Fan resource created"); } }
/* * Class: org_iochibity_ServiceManager * Method: registerServiceProvider * Signature: (Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Lorg/iochibity/IResourceServiceProvider;B)Lorg/iochibity/ResourceLocal; */ JNIEXPORT jobject JNICALL Java_org_iochibity_ServiceManager_registerServiceProvider__Ljava_lang_String_2_3Ljava_lang_String_2_3Ljava_lang_String_2Lorg_iochibity_IServiceProvider_2B (JNIEnv * env, jclass klass, jstring j_uri, jobjectArray j_tnames, jobjectArray j_ifnames, jobject j_ServiceProvider, /* jobject j_callback_param, */ jbyte j_policies) { OC_UNUSED(klass); printf("Java_org_iochibity_ServiceManager_registerServiceProvider ENTRY\n"); jobject j_resource_type_name = (*env)->GetObjectArrayElement(env, j_tnames, 0); const char *c_resource_type_name = ""; if (j_resource_type_name == NULL) { j_resource_type_name = (*env)->NewStringUTF(env, c_resource_type_name); c_resource_type_name = (char*) (*env)->GetStringUTFChars(env, j_resource_type_name, NULL); } else { c_resource_type_name = (char*) (*env)->GetStringUTFChars(env, j_resource_type_name, NULL); if (c_resource_type_name == NULL) { THROW_JNI_EXCEPTION("GetStringUTFChars"); return NULL; } } jobject j_resource_if_name = (*env)->GetObjectArrayElement(env, j_ifnames, 0); const char *c_resource_if_name = ""; if (j_resource_if_name == NULL) { j_resource_if_name = (*env)->NewStringUTF(env, c_resource_if_name); c_resource_if_name = (char*) (*env)->GetStringUTFChars(env, j_resource_if_name, NULL); } else { c_resource_if_name = (char*) (*env)->GetStringUTFChars(env, j_resource_if_name, NULL); if (c_resource_if_name == NULL) { THROW_JNI_EXCEPTION("GetStringUTFChars"); return NULL; } } const char *c_uri = ""; if (j_uri == NULL) { j_uri = (*env)->NewStringUTF(env, c_uri); c_uri = (char*) (*env)->GetStringUTFChars(env, j_uri, NULL); } else { c_uri = (char*) (*env)->GetStringUTFChars(env, j_uri, NULL); if (c_uri == NULL) { THROW_JNI_EXCEPTION("GetStringUTFChars"); } } /* prep callback */ /* (*env)->GetJavaVM(env, &g_jvm); */ /* bool returnValue = true; */ jobject x_ServiceProvider = NULL; /* jobject x_callback_param = NULL; */ if (j_ServiceProvider == NULL) { THROW_STACK_EXCEPTION(OC_STACK_INVALID_PARAM, "ResourceServiceProvider must not be null"); return NULL; } // convert local to global references to be passed x_ServiceProvider = (*env)->NewGlobalRef(env, j_ServiceProvider); jclass k_rsp = (*env)->GetObjectClass(env, x_ServiceProvider); if (k_rsp == NULL) { THROW_JNI_EXCEPTION("GetObjectClass for ResourceServiceProvider impl"); } OCResourceHandle c_resource_handle; OCStackResult op_result; op_result = OCCreateResource( &c_resource_handle, /* **Resource */ c_resource_type_name, /* const char *resourceTypeName, */ c_resource_if_name, /* const char *resourceInterfaceName, */ c_uri, /* const char *uri, */ c_ServiceProvider_react, /* x_callback_param, */ x_ServiceProvider, (uint8_t) j_policies); /* uint8_t resourceProperties */ if (op_result != OC_STACK_OK) THROW_STACK_EXCEPTION(op_result, "OCCreateResource failed"); /* we already have j_ServiceProvider, the ServiceProvider object; now we just need to link it to the resource created by OCCreateResource and populate it */ /* jmethodID mid_resource_ctor = (*env)->GetMethodID(env, K_RESOURCE_LOCAL, "<init>", "()V"); */ /* if (mid_resource_ctor == NULL) { */ /* THROW_JNI_EXCEPTION("GetMethodID failed for ResourceLocal ctor\n"); */ /* return NULL; */ /* } /\* insert handle to OCResource *\/ */ /* if (K_RESOURCE_LOCAL != NULL) { /\* cannot be null in this case *\/ */ /* jfieldID fid_handle = (*env)->GetFieldID(env, K_RESOURCE_LOCAL, "handle", "J"); */ /* if (fid_handle != NULL) { */ (*env)->SetLongField(env, j_ServiceProvider, FID_SP_HANDLE, (intptr_t) (OCResource*)c_resource_handle); /* } */ /* jfieldID urifield = (*env)->GetFieldID(env, K_RESOURCE_LOCAL, "uri", "Ljava/lang/String;"); */ /* if (urifield != NULL) { */ jstring jString = (*env)->NewStringUTF(env, ((OCResource*)c_resource_handle)->uri); if (jString != NULL) { (*env)->SetObjectField(env, j_ServiceProvider, FID_SP_URI_PATH, jString); } /* } */ /* jfieldID fid_policies = (*env)->GetFieldID(env, K_RESOURCE_LOCAL, "policies", "I"); */ /* if (fid_policies != NULL) { */ (*env)->SetIntField(env, j_ServiceProvider, FID_SP_POLICIES, (jint)((OCResource*)c_resource_handle)->resourceProperties); /* } else { */ /* THROW_JNI_EXCEPTION("SetIntField failed for fid_policies\n"); */ /* } */ /* FIXME: deal with OCResource.sequenceNumber */ /* instance id ∪nion */ /* printf("instance ORD: %d\n", ((OCResource*)c_resource_handle)->ins); */ /* printf("instance str: '%s'\n", ((OCResource*)c_resource_handle)->uniqueStr); */ /* printf("instance uuid ln: %d\n", ((OCResource*)c_resource_handle)->uniqueUUID.id_length); */ /* printf("instance uuid: %s\n", ((OCResource*)c_resource_handle)->uniqueUUID.id); */ /* FIXME: deal with OCResource instance Id union */ if ( ((OCResource*)c_resource_handle)->ins > 0) { printf("instance ORD: %d\n", ((OCResource*)c_resource_handle)->ins); } else if ( ((OCResource*)c_resource_handle)->uniqueStr != NULL) { printf("instance str: '%s'\n", ((OCResource*)c_resource_handle)->uniqueStr); } else if ( ((OCResource*)c_resource_handle)->uniqueUUID.id_length > 0) { printf("instance uuid: %s\n", ((OCResource*)c_resource_handle)->uniqueUUID.id); } else { /* printf("NO INSTANCE ID\n"); */ } /* } */ /* (*env)->ReleaseStringUTFChars(env, j_ServiceProvider_type_name, c_resource_type_name); */ /* (*env)->ReleaseStringUTFChars(env, j_ServiceProvider_if_name, c_resource_if_name); */ (*env)->ReleaseStringUTFChars(env, j_uri, c_uri); printf("org_iochibity_ServiceManager/registerServiceProvider EXIT\n"); return j_ServiceProvider; }
void createDemoResource() { sensor.temp = 0; sensor.light = 0; sensor.sound = 0; led.status = 0; buzzer.tone = 0; button.observer = 0; button.button = 0; button.touch = 0; button.button_old = 0; button.touch_old = 0; OCStackResult res = OCCreateResource(&sensor.handle, "grove.sensor", OC_RSRVD_INTERFACE_DEFAULT, "/grove/sensor", SensorOCEntityHandlerCb, NULL, OC_DISCOVERABLE|OC_OBSERVABLE); OC_LOG_V(INFO, TAG, "Created sensor resource with result: %s", getResult(res)); res = OCCreateResource(&led.handle, "grove.led", OC_RSRVD_INTERFACE_DEFAULT, "/grove/led", LedOCEntityHandlerCb, NULL, OC_DISCOVERABLE|OC_OBSERVABLE); OC_LOG_V(INFO, TAG, "Created LED resource with result: %s", getResult(res)); res = OCCreateResource(&lcd.handle, "grove.lcd", OC_RSRVD_INTERFACE_DEFAULT, "/grove/lcd", LcdOCEntityHandlerCb, NULL, OC_DISCOVERABLE|OC_OBSERVABLE); OC_LOG_V(INFO, TAG, "Created LCD resource with result: %s", getResult(res)); res = OCCreateResource(&buzzer.handle, "grove.buzzer", OC_RSRVD_INTERFACE_DEFAULT, "/grove/buzzer", BuzzerOCEntityHandlerCb, NULL, OC_DISCOVERABLE|OC_OBSERVABLE); OC_LOG_V(INFO, TAG, "Created buzzer resource with result: %s", getResult(res)); res = OCCreateResource(&button.handle, "grove.button", OC_RSRVD_INTERFACE_DEFAULT, "/grove/button", ButtonOCEntityHandlerCb, NULL, OC_DISCOVERABLE|OC_OBSERVABLE); OC_LOG_V(INFO, TAG, "Created button resource with result: %s", getResult(res)); }
void *presenceNotificationGenerator(void *param) { uint8_t secondsBeforePresence = 10; OIC_LOG_V(INFO, TAG, "Will send out presence in %u seconds", secondsBeforePresence); sleep(secondsBeforePresence); (void)param; OCDoHandle presenceNotificationHandles[numPresenceResources]; OCStackResult res = OC_STACK_OK; std::array<std::string, numPresenceResources> presenceNotificationResources { { std::string("core.fan"), std::string("core.led") } }; std::array<std::string, numPresenceResources> presenceNotificationUris { { std::string("/a/fan"), std::string("/a/led") } }; for(int i=0; i<numPresenceResources; i++) { if(res == OC_STACK_OK) { sleep(1); res = OCCreateResource(&presenceNotificationHandles[i], presenceNotificationResources.at(i).c_str(), OC_RSRVD_INTERFACE_DEFAULT, presenceNotificationUris.at(i).c_str(), OCNOPEntityHandlerCb, NULL, OC_DISCOVERABLE|OC_OBSERVABLE); } if(res != OC_STACK_OK) { OIC_LOG_V(ERROR, TAG, "\"Presence Notification Generator\" failed to create resource " "%s with result %s.", presenceNotificationResources.at(i).c_str(), getResult(res)); break; } OIC_LOG_V(INFO, TAG, PCF("Created %s for presence notification"), presenceNotificationUris[i].c_str()); } sleep(5); for(int i=0; i<numPresenceResources; i++) { if(res == OC_STACK_OK) { res = OCDeleteResource(presenceNotificationHandles[i]); } if(res != OC_STACK_OK) { OIC_LOG_V(ERROR, TAG, "\"Presence Notification Generator\" failed to delete "\ "resource %s.", presenceNotificationResources.at(i).c_str()); break; } OIC_LOG_V(INFO, TAG, PCF("Deleted %s for presence notification"), presenceNotificationUris[i].c_str()); } OIC_LOG(INFO, TAG, "================ stopping presence"); OCStopPresence(); return NULL; }
NSResult NSCreateResource(char *uri) { NS_LOG(DEBUG, "NSCreateResource - IN"); if (!uri) { NS_LOG(NS_ERROR, "Resource URI cannot be NULL"); return NS_ERROR; } if (strcmp(uri, NS_ROOT_URI) == 0) { NotificationResource.accepter = 0; NotificationResource.message_uri = NS_COLLECTION_MESSAGE_URI; NotificationResource.sync_uri = NS_COLLECTION_SYNC_URI; NotificationResource.handle = NULL; if (OCCreateResource(&NotificationResource.handle, NS_ROOT_TYPE, NS_DEFAULT_INTERFACE, NS_ROOT_URI, NSEntityHandlerNotificationCb, NULL, OC_DISCOVERABLE) != OC_STACK_OK) { NS_LOG(NS_ERROR, "Fail to Create Notification Resource"); return NS_ERROR; } } else if (strcmp(uri, NS_COLLECTION_MESSAGE_URI) == 0) { NotificationMessageResource.messageId = 0; (NotificationMessageResource.providerId)[0] = '\0'; NotificationMessageResource.type = 0; NotificationMessageResource.dateTime = NULL; NotificationMessageResource.ttl = 0; NotificationMessageResource.title = NULL; NotificationMessageResource.contentText = NULL; NotificationMessageResource.sourceName = NULL; NotificationMessageResource.mediaContents = NULL; if (OCCreateResource(&NotificationMessageResource.handle, NS_COLLECTION_MESSAGE_TYPE, NS_DEFAULT_INTERFACE, NS_COLLECTION_MESSAGE_URI, NSEntityHandlerMessageCb, NULL, OC_OBSERVABLE) != OC_STACK_OK) { NS_LOG(NS_ERROR, "Fail to Create Notification Message Resource"); return NS_ERROR; } } else if (strcmp(uri, NS_COLLECTION_SYNC_URI) == 0) { NotificationSyncResource.id = NULL; NotificationSyncResource.state = NULL; NotificationSyncResource.handle = NULL; if (OCCreateResource(&(NotificationSyncResource.handle), NS_COLLECTION_SYNC_TYPE, NS_DEFAULT_INTERFACE, NS_COLLECTION_SYNC_URI, NSEntityHandlerSyncCb, NULL, OC_OBSERVABLE) != OC_STACK_OK) { NS_LOG(NS_ERROR, "Fail to Create Notification Sync Resource"); return NS_ERROR; } } else { NS_LOG(ERROR, "Fail to create resource with invalid URI"); return NS_ERROR; } NS_LOG(DEBUG, "NSCreateResource - OUT"); return NS_OK; }
/** * @brief Initializes and creates a resource * * @param uri Path and name of the resource * @param interface Resource interfaces * @param type Resource types * @param properties Byte of allowed properties of the resources * @param OCIOhandler Callback called when a PUT request is received * * @return Pointer to the created resource */ OCBaseResourceT * createResource(char* uri, OCResourceType* type, OCResourceInterface* interface, uint8_t properties, OCIOHandler OCIOhandler) { // Create the resource OIC_LOG_V(DEBUG, TAG, "Creating resource with uri: %s\n", uri); OCBaseResourceT *resource = (OCBaseResourceT*)malloc(sizeof(OCBaseResourceT)); if(resource == NULL) {printNoMemoryMsg(); return NULL;} resource->uri = uri; resource->type = (OCResourceType*)malloc(sizeof(OCResourceType)); if(resource->type == NULL) {printNoMemoryMsg(); return NULL;} memcpy(resource->type, type, sizeof(OCResourceType)); resource->interface = (OCResourceInterface*)malloc(sizeof(OCResourceInterface)); if(resource->interface == NULL) {printNoMemoryMsg(); return NULL;} memcpy(resource->interface, interface, sizeof(OCResourceInterface)); resource->resourceProperties = properties; resource->OCIOhandler = OCIOhandler; resource->underObservation = false; resource->attribute = NULL; resource->next = NULL; OCStackResult res = OCCreateResource(&resource->handle, resource->type->resourcetypename, resource->interface->name, resource->uri, OCEntityHandlerCb, resource, resource->resourceProperties); OIC_LOG_V(DEBUG, TAG, "Created resource with OCStackResult: %s", res); // Add types OCResourceType *currentType = resource->type->next; while(currentType != NULL) { OIC_LOG_V(DEBUG, TAG, "Adding type in createResource: %s", currentType->resourcetypename); if(OCBindResourceTypeToResource(resource->handle, currentType->resourcetypename) != OC_STACK_OK) { OIC_LOG_V(ERROR, TAG, "Unable to bind type to resource: %s", currentType->resourcetypename); } currentType = currentType->next; } // Add interfaces OCResourceInterface *currentInterface = resource->interface->next; while(currentInterface != NULL) { OIC_LOG_V(DEBUG, TAG, "Adding interface in createResource: %s", currentInterface->name); if(OCBindResourceInterfaceToResource(resource->handle, currentInterface->name) != OC_STACK_OK) { OIC_LOG_V(ERROR, TAG, "Unable to bind interface to resource: %s", currentInterface->name); } currentInterface = currentInterface->next; } // Add the resource to the list of available resources pushResorcetoList(&resource); return resource; }
/* * Class: org_iochibity_ServiceManager * Method: registerServiceProvider * Signature: (Lorg/iochibity/ServiceProvider;)Lorg/iochibity/ServiceProvider; */ JNIEXPORT jobject JNICALL Java_org_iochibity_ServiceManager_registerServiceProvider__Lorg_iochibity_ServiceProvider_2 (JNIEnv * env, jclass klass, jobject j_ServiceProvider) { OC_UNUSED(klass); printf("Java_org_iochibity_ServiceManager_registerServiceProvider__Lorg_iochibity_ServiceProvider_2, ENTRY\n"); jobject j_Types = (*env)->GetObjectField(env, j_ServiceProvider, FID_SP_TYPES); const char *c_resource_type_name = ""; jobject j_resource_type_name = (*env)->CallObjectMethod(env, j_Types, MID_LL_GET, 0); if (j_resource_type_name == NULL) { j_resource_type_name = (*env)->NewStringUTF(env, c_resource_type_name); c_resource_type_name = (char*) (*env)->GetStringUTFChars(env, j_resource_type_name, NULL); } else { c_resource_type_name = (char*) (*env)->GetStringUTFChars(env, j_resource_type_name, NULL); if (c_resource_type_name == NULL) { THROW_JNI_EXCEPTION("GetStringUTFChars"); return NULL; } } jobject j_Interfaces = (*env)->GetObjectField(env, j_ServiceProvider, FID_SP_INTERFACES); jobject j_resource_if_name = (*env)->CallObjectMethod(env, j_Interfaces, MID_LL_GET, 0); const char *c_resource_if_name = ""; if (j_resource_if_name == NULL) { j_resource_if_name = (*env)->NewStringUTF(env, c_resource_if_name); c_resource_if_name = (char*) (*env)->GetStringUTFChars(env, j_resource_if_name, NULL); } else { c_resource_if_name = (char*) (*env)->GetStringUTFChars(env, j_resource_if_name, NULL); if (c_resource_if_name == NULL) { THROW_JNI_EXCEPTION("GetStringUTFChars"); return NULL; } } jobject j_Uri = (*env)->GetObjectField(env, j_ServiceProvider, FID_SP_URI_PATH); const char *c_uri = ""; if (j_Uri == NULL) { j_Uri = (*env)->NewStringUTF(env, c_uri); c_uri = (char*) (*env)->GetStringUTFChars(env, j_Uri, NULL); } else { c_uri = (char*) (*env)->GetStringUTFChars(env, j_Uri, NULL); if (c_uri == NULL) { THROW_JNI_EXCEPTION("GetStringUTFChars"); } } int c_policies = (*env)->GetIntField(env, j_ServiceProvider, FID_SP_POLICIES); /* prep callback */ /* (*env)->GetJavaVM(env, &g_jvm); */ /* bool returnValue = true; */ jobject x_ServiceProvider = NULL; if (j_ServiceProvider == NULL) { THROW_STACK_EXCEPTION(OC_STACK_INVALID_PARAM, "ResourceServiceProvider must not be null"); return NULL; } // convert local to global references to be passed x_ServiceProvider = (*env)->NewGlobalRef(env, j_ServiceProvider); jclass k_rsp = (*env)->GetObjectClass(env, x_ServiceProvider); if (k_rsp == NULL) { THROW_JNI_EXCEPTION("GetObjectClass for ResourceServiceProvider impl"); } OCResourceHandle c_resource_handle; OCStackResult op_result; op_result = OCCreateResource( &c_resource_handle, /* **Resource */ c_resource_type_name, /* const char *resourceTypeName, */ c_resource_if_name, /* const char *resourceInterfaceName, */ c_uri, /* const char *uri, */ c_ServiceProvider_react, x_ServiceProvider, (uint8_t) c_policies); /* uint8_t resourceProperties */ if (op_result != OC_STACK_OK) THROW_STACK_EXCEPTION(op_result, "OCCreateResource failed"); (*env)->SetLongField(env, j_ServiceProvider, FID_SP_HANDLE, (intptr_t) (OCResource*)c_resource_handle); /* jfieldID urifield = (*env)->GetFieldID(env, K_RESOURCE_LOCAL, "uri", "Ljava/lang/String;"); */ /* if (urifield != NULL) { */ jstring jString = (*env)->NewStringUTF(env, ((OCResource*)c_resource_handle)->uri); if (jString != NULL) { (*env)->SetObjectField(env, j_ServiceProvider, FID_SP_URI_PATH, jString); } /* } */ /* jfieldID fid_policies = (*env)->GetFieldID(env, K_RESOURCE_LOCAL, "policies", "I"); */ /* if (fid_policies != NULL) { */ (*env)->SetIntField(env, j_ServiceProvider, FID_SP_POLICIES, (jint)((OCResource*)c_resource_handle)->resourceProperties); /* } else { */ /* THROW_JNI_EXCEPTION("SetIntField failed for fid_policies\n"); */ /* } */ /* FIXME: deal with OCResource.sequenceNumber */ /* instance id ∪nion */ /* printf("instance ORD: %d\n", ((OCResource*)c_resource_handle)->ins); */ /* printf("instance str: '%s'\n", ((OCResource*)c_resource_handle)->uniqueStr); */ /* printf("instance uuid ln: %d\n", ((OCResource*)c_resource_handle)->uniqueUUID.id_length); */ /* printf("instance uuid: %s\n", ((OCResource*)c_resource_handle)->uniqueUUID.id); */ /* FIXME: deal with OCResource instance Id union */ if ( ((OCResource*)c_resource_handle)->ins > 0) { printf("instance ORD: %d\n", ((OCResource*)c_resource_handle)->ins); } else if ( ((OCResource*)c_resource_handle)->uniqueStr != NULL) { printf("instance str: '%s'\n", ((OCResource*)c_resource_handle)->uniqueStr); } else if ( ((OCResource*)c_resource_handle)->uniqueUUID.id_length > 0) { printf("instance uuid: %s\n", ((OCResource*)c_resource_handle)->uniqueUUID.id); } else { /* printf("NO INSTANCE ID\n"); */ } /* } */ /* (*env)->ReleaseStringUTFChars(env, j_ServiceProvider_type_name, c_resource_type_name); */ /* (*env)->ReleaseStringUTFChars(env, j_ServiceProvider_if_name, c_resource_if_name); */ (*env)->ReleaseStringUTFChars(env, j_Uri, c_uri); printf("org_iochibity_ServiceManager/registerServiceProvider EXIT\n"); return j_ServiceProvider; }