Understnading why enumeration failed

Sometimes an application enumerates for a specific node, and gets zero results. Aside for the obvious reason where no module implementing this node type is installed, other reasons may occur - a module might be installed but have no license, or a needed hardware device is currently disconnected.

OpenNI enables the application to get a full list of modules that failed to enumerate, and why each one failed. It is done using the xn::EnumerationErrors object.

The following code tries to create a Hands Generator node, and if enumeration failed, checks all errors:

xn::EnumerationErrors errors;
xn::HandsGenerator handsGen;
nRetVal = context.CreateAnyProductionTree(XN_NODE_TYPE_HANDS, NULL, handsGen, &errors);
if (nRetVal == XN_STATUS_NO_NODE_PRESENT)
{
    // Iterate over enumeration errors, and print each one
    for (xn::EnumerationErrors::Iterator it = errors.Begin(); it != errors.End(); ++it)
    {
        XnChar strDesc[512];
        xnProductionNodeDescriptionToString(&it.Description(), strDesc, 512);
        printf("%s failed to enumerate: %s\n", xnGetStatusString(it.Error()));
    }
    return (nRetVal);
}
else if (nRetVal != XN_STATUS_OK)
{
    printf("Create failed: %s\n", xnGetStatusString(nRetVal));
    return (nRetVal);
}
Generated on Fri Nov 9 22:59:08 2012 for OpenNI 1.3.2 by  doxygen 1.6.3