M2MDevice::M2MDevice() : M2MObject(M2M_DEVICE_ID) { M2MBase::set_register_uri(false); M2MBase::set_operation(M2MBase::GET_ALLOWED); _device_instance = M2MObject::create_object_instance(); _device_instance->set_operation(M2MBase::GET_ALLOWED); _device_instance->set_register_uri(true); if(_device_instance) { _device_instance->set_coap_content_type(COAP_CONTENT_OMA_TLV_TYPE); M2MResource* res = _device_instance->create_dynamic_resource(DEVICE_REBOOT, OMA_RESOURCE_TYPE, M2MResourceInstance::OPAQUE, false); if(res) { res->set_operation(M2MBase::POST_ALLOWED); res->set_register_uri(false); } M2MResourceInstance* instance = _device_instance->create_dynamic_resource_instance(DEVICE_ERROR_CODE, OMA_RESOURCE_TYPE, M2MResourceInstance::INTEGER, true,0); if(instance) { M2MResource * dev_res = _device_instance->resource(DEVICE_ERROR_CODE); dev_res->set_register_uri(false); instance->set_operation(M2MBase::GET_ALLOWED); uint32_t size = 0; char *buffer = (char*)malloc(BUFFER_SIZE); if(buffer) { size = m2m::itoa_c(0, buffer); if (size <= BUFFER_SIZE) instance->set_value((const uint8_t*)buffer, size); free(buffer); } instance->set_register_uri(false); } res = _device_instance->create_dynamic_resource(DEVICE_SUPPORTED_BINDING_MODE, OMA_RESOURCE_TYPE, M2MResourceInstance::STRING, true); if(res) { res->set_operation(M2MBase::GET_ALLOWED); res->set_value((const uint8_t*)BINDING_MODE_UDP.c_str(), (uint32_t)BINDING_MODE_UDP.length()); res->set_register_uri(false); } } }
M2MResourceInstance* M2MDevice::create_resource_instance(DeviceResource resource, int64_t value, uint16_t instance_id) { M2MResourceInstance* res = NULL; String device_id = ""; // For these resources multiple instance can exist if(AvailablePowerSources == resource) { if(check_value_range(resource, value)) { device_id = DEVICE_AVAILABLE_POWER_SOURCES; } } else if(PowerSourceVoltage == resource) { device_id = DEVICE_POWER_SOURCE_VOLTAGE; } else if(PowerSourceCurrent == resource) { device_id = DEVICE_POWER_SOURCE_CURRENT; } else if(ErrorCode == resource) { if(check_value_range(resource, value)) { device_id = DEVICE_ERROR_CODE; } } if(!device_id.empty()) { if(_device_instance) { res = _device_instance->create_dynamic_resource_instance(device_id,OMA_RESOURCE_TYPE, M2MResourceInstance::INTEGER, true, instance_id); M2MResource *resource = _device_instance->resource(device_id); if(resource) { resource->set_register_uri(false); } if(res) { char *buffer = (char*)malloc(BUFFER_SIZE); if(buffer) { uint32_t size = m2m::itoa_c(value, buffer); if (size <= BUFFER_SIZE) { res->set_value((const uint8_t*)buffer, size); // Only read operation is allowed for above resources res->set_operation(M2MBase::GET_ALLOWED); } free(buffer); } res->set_register_uri(false); } } } return res; }