The latest Microsoft HealthVault Device Logo Requirements (v1.20) are now available!
25 May 09 09:27 PM | hvdevice | 2 Comments   

The Works with Microsoft HealthVault Device Logo Program v1.20 requirements and test instructions are now available! 

About the Logo Program: 
The Works with Microsoft HealthVault Device Logo Program is designed to build customer awareness around HealthVault, enable consumers to identify devices that are compatible with HealthVault, and ensure a positive user experience. Manufacturers that certify their devices can benefit by:

  • Leveraging the trusted Microsoft brand
  • Minimizing their support costs by passing tests specifically designed for HealthVault Connection Center compatibility
  • Listing their devices and drivers in the HealthVault Device Directory and the HealthVault Connection Center driver list
  • Becoming eligible for joint marketing opportunities 

Click here for more information about how to obtain a logo.

What's New in V1.20
Here are some of the highlights.  For more details, please read the v1.20 requirements and test instructions.

  • There have been several packaging requirements added so the user has proper guidance on how to create a HealthVault account, download HealthVault Connection Center, Install the driver, Setup the device, Take a measurement, and upload the data to HealthVault.
  • If the device ships with non-HealthVault software, it must not create a conflict with the HealthVault experience 
  • Compatibility with XP, Vista, Vista 64 bit, and Windows 7 (when released)
  • The driver must populate a display override field if it is required to ensure HealthVault.com displays the same units as the device
  • Driver must send events if there is new data available while the device is connected so there is no need to unplug/plug the cable to upload the new data
  • The driver package now needs to be code signed
  • A self test check list has been added to help prepare for submission

Timeline
Microsoft authorized test labs will test against the Works with Microsoft HealthVault Device Logo Program v1.0 requirements up until June 24, 2009.  All devices submitted to a test lab after June 24, 2009, will need to conform to the Works with Microsoft HealthVault Device Logo Program v1.20 requirements.

Windows 7 Release Candidate is now available!
08 May 09 03:03 AM | hvdevice | 1 Comments   

We’re excited to announce the availability of Windows 7 Release Candidate (RC), a pre-release version of the next-generation operating system from Microsoft.

We encourage all partners who are building HealthVault compatible drivers to download the latest version of Windows 7 and try it out!  It won't be long before Windows 7 is officially released so you want to make sure that your drivers are compatible. 

 

Passing Preformatted HealthVault data on a WPD device
28 April 09 08:58 PM | hvdevice | 1 Comments   

In the latest versions of HealthVault Connection Center, we have enabled a new type data interaction between device drivers and HealthVault Connection Center.  Some devices may store data on the device as a native HealthVault XML file, as a result it is not necessary to convert the HealthVault XML into WPD properties and back to HealthVault XML.  So we have implemented a "data taxi"  feature in HealthVault Connection Center that enables drivers to directly expose the XML's to be uploaded into HealthVault.  This feature allows for customized data types, as well as non-WPD supported data types to be sent to the HealthVault platform.

When this device is connected to the PC, its WPD driver allows Connection Center to find the items and identify them as preformatted HealthVault Data.  Next, Connection Center will transfer the data (bypassing the usual WPD to HealthVault transforms that are required for data not already in HealthVault format).  From this point on, the data items are uploaded in the usual way for Connection Center.

Attached is a document that discusses how you would be able implement this in your drivers. 

DDK 1.5 released
03 April 09 06:26 PM | hvdevice | 0 Comments   

The latest HealthVault Device Development kit has been released. It contains many improvements that can be leveraged in building a higher quality driver for your device to enable it to work with HealthVault.   

  •  Updated WPD schema documentation
  •  Compliance with HealthVault Logo
  •  One click build of drivers from WPD source all the way to a MSI
  •  One click build for multiple OS support (x86 and x64)
  •  Common driver class that eliminates lots of redundant code across samples
Filed under:
HVCC V1 backwards compatibility with HVCC V2 XML files
22 October 08 11:23 PM | hvdevice | 0 Comments   

In HealthVault V2, we are allowing whitespaces and newlines.  However V1 of HealthVault Connection Center will not be able to handle the whitespaces and newlines. For example, (e.g., <hello>This is my text</hello> must be used instead of

<hello>

this is my text

</hello>

What happened to the WPD data in the thing type with HVCC V2?
17 October 08 01:37 AM | hvdevice | 1 Comments   
In the latest version of HealthVault Connection center, we have optimized the size of the data being sent from the device to the HealthVault platform.  The WPD data is being stored in the "other-data" section. This content is in a zipped-base64 package that can be acessed with some additional work.  Below is sample code that is able to access the WPD content.

        /// <summary>
        /// The sample function demonstrating how to get WPD data from items uploaded to HealthVault 
        /// by v1.x (old behavior) and by v 2.x client (new behavior).
        /// It accesses first self-record in the account associated with the AuthenticatedConnection object,
        /// retrieves all items of weight type and retrieves WPD data if exist
        /// </summary>
        /// <param name="authenticatedConnection"></param>
        private void SampleWorkingWithWpdData(AuthenticatedConnection authenticatedConnection)
        {
            // getting a first self-record ID
            Guid recordId = authenticatedConnection.GetPersonInfo().GetSelfRecord().Id;
            HealthRecordAccessor healthRecordAccessor = new HealthRecordAccessor(authenticatedConnection, recordId);

            // retrieve all items of the weight type for this record
            HealthRecordItemCollection healthRecordItemCollection = healthRecordAccessor.GetItemsByType(Health.ItemTypes.Weight.TypeId, HealthRecordItemSections.Xml);

            // loop through each healthRecordItem
            foreach (HealthRecordItem healthRecordItem in healthRecordItemCollection)
            {
                string itemXml = healthRecordItem.GetItemXml();
                if (healthRecordItem.CommonData != null &&
                    healthRecordItem.CommonData.Extensions != null)
                {
                    // create variable to contain WPD data
                    string dataWpd = string.Empty;

                    // going through each Extension in HealthRecordItem and proceed if it has WPD data
                    foreach (HealthRecordItemExtension healthRecordItemExtension in healthRecordItem.CommonData.Extensions)
                    {
                        if (string.Compare(healthRecordItemExtension.Source, "WPD", true) == 0) // the item has WPD extension
                        {
                            // old behavior:WPD data contained in healthRecordItemExtension.ExtensionData. 
                            if (healthRecordItemExtension.ExtensionData != null)
                            {
                                dataWpd = healthRecordItemExtension.ExtensionData.CreateNavigator().InnerXml;
                            }
                            // Now if the healthRecordItemExtension.ExtensionData is missing, it's a new data model where 
                            //we retrieve WPD compressed data from OtherData:
                            else
                            {
                                HealthRecordItem healthRecordItemDataOther = healthRecordAccessor.GetItem(healthRecordItem.Key.Id, HealthRecordItemSections.OtherData);
                                if (string.Compare(healthRecordItemDataOther.OtherData.ContentEncoding, "base64", true) == 0 ||
                                    string.Compare(healthRecordItemDataOther.OtherData.ContentEncoding, "base-64", true) == 0)
                                {
                                    // converting base64 zipped items to string
                                    dataWpd = Base64GZipTextToString(healthRecordItemDataOther.OtherData.Data);
                                }
                            }
                            break;
                        }
                    }

                    if(!string.IsNullOrEmpty(dataWpd))
                    {
                        // do something with WPD data
                    }
                }
            }
        }
 
        /// <summary>
        /// Decodes string from base 64 and decodes it using GZip decompression
        /// </summary>
        /// <param name="source"></param>
        /// <returns>Decoded from base-64 and decompressed string</returns>
        private string Base64GZipTextToString(string source)
        {
            // verify argument
            if (string.IsNullOrEmpty(source))
            {
                throw new ArgumentNullException("source","Parameter cannot be null or empty");
            }

            // convert the string to Unicode bytes
            byte[] srcBuffer = Convert.FromBase64String(source);

            _compressedBufferSize = srcBuffer.Length;

            using(MemoryStream memoryStream = new MemoryStream())
            {
                // compress the buffer
                memoryStream.Write(
                    srcBuffer,
                    0,
                    srcBuffer.Length);

                // reset the memory stream to read the decompressed data
                memoryStream.Position = 0;

                System.IO.Compression.GZipStream decompression = 
                    new System.IO.Compression.GZipStream(
                        memoryStream, 
                        System.IO.Compression.CompressionMode.Decompress);

                byte[] decompressedBytes = ReadAllBytesFromStream(decompression);

                _decompressedBufferSize = decompressedBytes.Length;

                // reading compressed buffer back
                //decompression.Read(decompressedBytes, 0, decompressedBytes.Length);

                decompression.Close();

                return System.Text.Encoding.UTF8.GetString(decompressedBytes);
            }
        }

        private const int buffer_size = 100;

        private static byte[] ReadAllBytesFromStream(System.IO.Compression.GZipStream stream)
        {
            // Use this method is used to read all bytes from a stream.
            int buffer_size = 100;
            byte[] buffer = new byte[buffer_size];
            using (MemoryStream memoryStream = new MemoryStream())
            {
                while (true)
                {
                    int bytesRead = stream.Read(buffer, 0, buffer_size);
                    if (bytesRead == 0)
                    {
                        break;
                    }
                    memoryStream.Write(buffer, 0, bytesRead);
                }

                // reset the buffer to read the data
                memoryStream.Position = 0;

                byte[] newbuffer = new byte[memoryStream.Length];
                memoryStream.Read(newbuffer,0,newbuffer.Length);

                return newbuffer;
            }
        }
Filed under:
HealthVault Connection Center V2
17 October 08 01:18 AM | hvdevice | 0 Comments   

We are excited to announce that on Oct 6th we officially launched HealthVault Connection Center v2.0.  This major upgrade takes HealthVault device connectivity to a whole new level. 

 

Some of the amazing new features include:

·         Brand new user experience with the same look and feel as the rest of the HealthVault family, and smooth transitions between client and web.

·         Get started quickly, with help when you need it. First Run walks new users through the complexities of signing in for the first time and installing a new device.  Smart default settings allow users to upload as soon as they’re ready, and automate their entire workflow.

·         Install drivers for additional devices using the same, familiar UI. Add a Device wizard guides users through driver installation for any device that connects with HealthVault.

·         Launch the HealthVault application of your choice as soon as you’ve uploaded your data.  Dynamic Application Detection automatically lists only the applications that use the data uploaded from the device.

·         Upload from home and your office without fear of duplication.  Smart Synchronization skips duplicates even if you’re using the same device from a different computer and automatically updates items that have changed.

·         Upload your data to your record from a shared device.  Smart Multi-User device support allows users who share multi-user devices to direct their data to the correct record.

·         Save your device data even if you’re not connected to the Internet.  Auto Store-And-Forward saves your data locally and lets you resume your upload when you reconnect to the network.

 

For Developers working with Connection Center:

·         You no longer need to set the registry keys to point the connection center to the pre production environment. When you are not logged in the connection center you will see a menu item mentioning “services”, choose this drop down to select the environment you want to target against. If you don’t “services” then please sign out using “Tools -> Sign Out”  to see this menu item.

 

HealthVault Device Logo program is now available
08 July 08 10:32 PM | hvdevice | 2 Comments   

The HealthVault logo program has been created to enable consumers to identify devices that work with HealthVault.  Find out more about the logo program at http://www.healthvault.com/devicelogo/  The logo program contains a testing component that validates compatibility with HealthVault Connection Center.  We highly encourage you to use these tests to validate your driver and also highly encourage you to pursue the HealthVault logo to clearly identify that your device will work with HealthVault.

 

HealthVault Solutions Conference
03 April 08 11:37 PM | hvdevice | 0 Comments   

Register now for the Microsoft HealthVault Solutions Conference 2008, June 9-10

The Microsoft HealthVault Solutions Conference 2008 is now open for registration!

Join us and fellow experts from across the industry to discover how you can build on the HealthVault platform and help transform healthcare. Share ideas and innovations with other solutions and device providers, and play a part in bringing healthcare into the Internet Age.

Space is limited to only two individuals per organization, so reserve your spot today at http://www.ustechsregister.com/healthvaultsolutions.

Microsoft HealthVault Solutions Conference 2008
June 9-10
Hyatt Regency, Bellevue, Washington

Agenda Highlights:

  • Find out about the latest upgrades to the HealthVault platform
  • Discover what applications have already been developed for HealthVault
  • Hear the finalists announced for the HealthVault Be Well Fund
  • Learn from guest speakers and network with fellow industry experts

Don’t miss out on one of the most informative health solutions conferences of the year!

Learn more about HealthVault at: www.healthvault.com/hospitals

Getting your driver signed
31 January 08 01:05 AM | hvdevice | 1 Comments   

In order to get their drivers signed, first you must be installable via an INF file.  Once you have that, then you are eligble to be submit your driver through the Windows logo programs Unclassified program.  Devices and drivers are not eligble to use the Windows logo as this category only tests for driver reliability and stability, not for actual functionality.  Drivers that are submitted through this category are required to comply with all device fundamental requirements, including the requirement for x64 support.

 For first timers going though the logo program, you should read the following link:

 http://www.microsoft.com/whdc/getstart/testing.mspx

 This will get you familiar with how to register with the online submission site (Winqual), give you direction on how to obtain the Windows Logo Kit (WLK) which contains the actual tests, and give you directions on how to receive assistance.

 If you have any questions, feel free contact Logo Feedback at logofb@microsoft.com.

Filed under:
HealthVault Device Driver Development Kit available on MSDN
31 January 08 12:55 AM | hvdevice | 1 Comments   

The latest version of the HealthVault Device Driver Development kit is not posted on the HealthVault MSDN site.  This kit contains documentation, sample code and sample installer code to build a driver for HealthVault.  The sample drivers that are included allow you to easily build drivers for the following devices with minimal effort.

  • Blood Pressure monitor
  • Blood Glucose Monitor
  • Weight scale
  • Fitness Monitoring device (pedometers, heart rate monitoring, etc)

The package also includes a simple installer project to allow you to build a deployable package to send out to your consumers.  The DDDK will be removed from the connect site, but continue to use the connect site to send bugs or ask us questions. 

Filed under:
The Device Driver Development Kit is now available at Connect.microsoft.com
26 November 07 11:24 PM | hvdevice | 1 Comments   

The Device Driver development kit is now available at connect.microsoft.com.  You will need the following invitation code"hv-3P6H-R3DP" to obtain access to the HealthVault device connect site.  The Microsoft Connect site is a central source for varous pieces of information that you may find useful for building a HealthVault compatible device.  The connect will also allow for you to have a direct connection into Microsoft for bug support, support requests, and general information.  

 

Filed under:
"Code 10" errors with WPD drivers
01 November 07 09:48 PM | hvdevice | 1 Comments   

While building your drivers for HealthVault Conection Center you may come across the "Code 10" error and the device manager gives you a status of "This device cannot start. (Code 10)"  This is due to your driver not being able to start, or it may have crashed..  So below are some of the steps that you can take to help debug your driver.

The first thing to check is whether the driver even loads correctly as a DLL.  A simple way to do this is to run the Depends.exe tool (comes with Visual Studio) on the PC that has the problem.

If Depends.exe flags anything (e.g. can’t find the debug VC CRT, or some helper DLL) you should be able to identify and therefore fix the problem.  There are two common problems of this type:
- Missing CRTs.
    o   Whether DEBUG or Retail, the correct version of the VC runtime redist needs to be installed on the machine.  NOTE: Connection Center will install VC runtime for VC 2005 SP1.
- Missing I/O or device library file
    o   Make sure the device INF copies the I/O library or device library file to the correct location.  If your driver does not explicitly load library from a known directory but instead relies on the system to find and load the DLL, remember that the EXE you’re running under (WUDFHOST.EXE) has a working directory of %WINDIR%\System32, not the subdirectory where your driver is (%windir%\System32\drivers\umdf\Hdi).  Therefore, your INF may need to specify a different target location in the CopyFiles section for that file.

If Depends.exe loads the DLL fine, but you still have a code 10, then your driver is likely loading but failing to start.  The best thing to do there is to debug the driver when it is loaded/started.  Follow these steps to debug the driver start:

- WUDF has a registry entry that helps with debugging.  This entry causes the WUDF service to wait while a debugger is attached for a specified amount of time.
  (See http://msdn2.microsoft.com/en-us/library/aa510985.aspx)
- Set the registry value at
  "HKLM\Software\Microsoft\Windows NT\CurrentVersion\WUDF\Services\{193a1820-d9ac-4997-8c55-be817523f6aa}\HostProcessDbgBreakOnStart"
  to 0x00030000.
- Disable your WPD device in device manager
- Open your driver project in Visual Studio 2005 and open the source file 'device.cpp'.
- Set a break point in the function CDevice::OnPrepareHardware( ).
- Enable your WPD driver from device manager.
- In Visual Studio 2005 open the ‘Attach To Process’ dialog.  (Debug->Attach to process…).
- Check the boxes labeled ‘Show processes from all users’ and ‘Show processes in all sessions’.
- The process to attach to is called 'WUDFHOST.EXE'. Your WPD Driver is hosted in this process.  (If there is more than one WUDFHOST.EXE listed,
   it means you have more than one WPD driver running.  Go to Device Manager and DIsable the other WPD devices.)
- Hit F5 in Visual Studio 2005 and it will hit your Breakpoint in 'device.cpp'
- Walk through your driver start-up code.  Note that you must not return an error from CDevice::OnPrepareHardware( ).
  Returning an error tells PnP that your driver has a critical error and cannot load.  If your device is not available at load time,
  that is fine - you should still return success (you will just not have any data yet).

How do I enable connection center to automatically detect my non-pnp health device
17 October 07 10:31 PM | hvdevice | 1 Comments   

There are two main options for how to work around issues with non-PnP buses (serial port, irDA, etc):

1)·Have the driver poll

  • This polling thread is started when the driver loads and continues to poll until the driver is unloaded.
  • It provides a PnP-like experience since the driver can send an event to Connection Center (and all listening apps) when the device arrives and when it leaves.
  • This is the typical solution most vendors implement.

2) Have the driver be request-driven (i.e. no polling)

  • When a request comes into the driver for data (e.g. an application is asking “How many Glucose Readings do you have?”) the driver attempts to talk to the device.  If the device responds, then the driver grabs the data and fulfills the request.  If the device does not respond, then the driver assumes the device is not currently plugged in and returns no items.
  • This is safer than polling, but has two main drawbacks:
    • The user experience is not as good because the user has to initiate the action (e.g. Browse the device in My Computer, or Click “Upload Data to HealthVault” in Connection Center etc.).
    • The driver needs to implement some logic about when it “refreshes” data in its cache (i.e. since it’s not polling, it doesn’t know when the device leaves and comes back with new data.  Calling into the device on every request is usually not an option for performance reasons so some form of caching is usually employed).

Based on your needs, you may implement either solutions.

 

What is a HealthVault Device?
17 October 07 10:10 PM | hvdevice | 1 Comments   

The HealthVault Connection Center is built upon the Windows Portable Devices (WPD) technology that is used to connect cameras, media players, and cell phones to Windows.  With the release of HealthVault we’ve extended this architecture to support health and fitness devices.  The WPD technology is bus agnostic.  This means that it is completely independent of the connectivity mechanism used to connect the device to Windows.  As such it supports all connectivity mechanisms including USB 1.1, USB 2.0, Bluetooth, IR, Serial, etc.

 

The WPD model requires the installation of a User Mode driver.  A user mode driver is considerably easier to build than a kernel driver.  A user mode driver would be responsible for establishing a connection to the device from the PC, then respond to requests from the HealthVault Connection Center for data recorded on the device.  The primary responsibility of the driver is to map the proprietary device data types into HealthVault data types.  With this simple driver the health device can connect with the HealthVault Connection Center without any modification to the device firmware.

 

The following resources describe the WPD architecture in more detail.

 

High-level video discussion of the WPD technology at

http://channel9.msdn.com/ShowPost.aspx?PostID=234357#234357

 

MSDN contains the latest SDK information on WPD.  This design and programming guide describes development using the WPD API. 

http://msdn2.microsoft.com/en-gb/library/ms740786.aspx

 

Windows Driver Development Kit describes how to build a WPD user mode driver, complete with documentation and samples. 

http://www.microsoft.com/whdc/DevTools/WDK/WDKpkg.mspx

 

To learn about the WPD extensions for Health and Fitness devices you should download the HealthVault SDK.

http://msdn2.microsoft.com/en-us/healthvault/default.aspx

More Posts Next page »

Search

This Blog

Syndication

Page view tracker