Пример #1
0
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);
        }
    }
}
Пример #2
0
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;
}