locked
"Bluetooth Low Energy Health Profiles sample" encounter E_ACCESSDENIED 80070005

    Question

  • I want metro style app Bluetooth Low Energy Health Profiles sample can access Thermometer Health Service installed in Bluetooth Low Energy (LE) Generic Attribute (GATT) Profile Drivers. However, I encountered 80070005 (E_ACCESSDENIED) while Health Profile Metro App trying to access device.

    The error is in Thermometer.js. deviceFactory.getDeviceFromIdAsync returns error 80070005 .

                done(function (devices) {
                    // If devices were found, proceed with initialization
                    if (devices.length > 0) {
                        try {
    
                            // Use WPD Automation to initialize the device objects
                            var deviceFactory = new ActiveXObject("PortableDeviceAutomation.Factory");
    
                            var devServiceName = document.getElementById('deviceServiceName' + Constants.thermometerDeviceShortName);
                            devServiceName.innerText = devices[0].name;
    
                            // For the purpose of this sample we will initialize the first device
                            deviceFactory.getDeviceFromIdAsync(devices[0].id, function (device) {
    
                                // Initialize the temperature service
                                tempService = device.services[0];
    
                                // Set up ApplicationActivated to be called asynchronously (fire-and-forget mode)
                                tempService.onApplicationActivatedComplete = function() {};
    
                                // Set up ApplicationSuspended to be called asynchronously (fire-and-forget mode)
                                tempService.onApplicationSuspendedComplete = function() {};
    
                                var devs = DeviceData.getDevices();
                                var devId = Constants.thermometerDeviceIndex;
                                devs[devId] = {
                                    devId: devId,
                                    name: devices[0].name,
                                    description: devices[0].id,
                                    data: [],
                                    handler: function (timestamp, thermometerMeasurementValue) {
                                        try {
                                            var measuredValue = {
                                                timestamp: new Date(timestamp * 1000),
                                                value: thermometerMeasurementValue,
                                                toString: function () {
                                                    return this.value + " \u00B0C @ " + this.timestamp;
                                                },
                                            };
    
                                            DeviceData.addValue(
                                                Constants.thermometerDeviceIndex,
                                                measuredValue);
    
                                            if (uiVisible) {
                                                UIHelper.updateUI(Constants.thermometerDeviceShortName, Constants.thermometerDeviceIndex, measuredValue);
                                            }
                                        } catch (exception) {
                                            WinJS.log && WinJS.log(exception.toString(), "sample", "error");
                                        }
                                    }
                                };
    
                                tempService.onTemperatureMeasurement = devs[devId].handler;
                                tempInitialized = true;
                                UIHelper.refreshUI(Constants.thermometerDeviceShortName, Constants.thermometerDeviceIndex);
                                tempService.ApplicationActivated();
    
                            }, function (errorCode) {
                                WinJS.log && WinJS.log("Getting the device failed with error: " + errorCode.toString(16), "sample", "error");
                            });
    
                        } catch (exception) {
                            WinJS.log && WinJS.log(exception.toString(), "sample", "error");
                        }

    I've followed the instructions in Forum post Why access denied (80070005) when I run Metro Simple bluetooth LE Controller using TICC2540 Dev kit in Win8 release preview. I created the Device Metadata Package on my local Win8 64bit Desktop, but I still encounter error 80070005 (E_ACCESSDENIED). 

    Are the following values wrong for Bluetooth Low Energy Health Profiles sample ?
    I have remove the Bluetooth Low Energy device and reinstall again, and reboot again, but I still has 80070005 error.


    Friday, September 14, 2012 10:08 AM

Answers

  • Uncheck the "Access Custom Driver" box in the Device Metadata Authoring Wizard and redeploy the metadata. This box is only intended for custom WDF drivers accessed via IDeviceIoControl.

    Regards,

    lisa


    Thursday, September 20, 2012 2:18 PM

All replies

  • Have you enabled test signing and rebooted?

    Best Wishes - Eric

    Saturday, September 15, 2012 1:46 AM
    Moderator
  • I have launched Command Prompt(Admin) console window, run "bcdedit /set testsigning on", and then reboot Win8 Desktop PC. I found "Test Mode" showing in the bottom right corner of desktop.
    However I still encounter error 80070005 in
    Thermometer.js. deviceFactory.getDeviceFromIdAsync().

    Monday, September 17, 2012 2:48 AM
  • Uncheck the "Access Custom Driver" box in the Device Metadata Authoring Wizard and redeploy the metadata. This box is only intended for custom WDF drivers accessed via IDeviceIoControl.

    Regards,

    lisa


    Thursday, September 20, 2012 2:18 PM