OSVR_ReturnCode
osvrAnalysisSyncInit(OSVR_IN_PTR OSVR_PluginRegContext ctx,
                     OSVR_IN_STRZ const char *name,
                     OSVR_IN_PTR OSVR_DeviceInitOptions options,
                     OSVR_OUT_PTR OSVR_DeviceToken *device,
                     OSVR_OUT_PTR OSVR_ClientContext *clientCtx) {
    if (!ctx) {
        OSVR_DEV_VERBOSE("osvrAnalysisSyncInit: can't use a null plugin "
                         "registration context.");
        return OSVR_RETURN_FAILURE;
    }
    if (!name || !(name[0])) {
        OSVR_DEV_VERBOSE(
            "osvrAnalysisSyncInit: can't use a null or empty device name.");
        return OSVR_RETURN_FAILURE;
    }
    OSVR_VALIDATE_OUTPUT_PTR(device, "device token");
    OSVR_VALIDATE_OUTPUT_PTR(clientCtx, "client context");

    auto initialResult =
        osvrDeviceSyncInitWithOptions(ctx, name, options, device);
    if (initialResult == OSVR_RETURN_FAILURE) {
        OSVR_DEV_VERBOSE(
            "osvrAnalysisSyncInit: couldn't create initial device token.");
        return OSVR_RETURN_FAILURE;
    }

    /// Dig the VRPN connection out of the server.
    auto osvrConn = osvr::connection::Connection::retrieveConnection(
        osvr::pluginhost::PluginSpecificRegistrationContext::get(ctx)
            .getParent());
    auto vrpnConn = extractVrpnConnection(*osvrConn);

    /// Create a client context here

    /// @todo Use an interface factory that handles relative paths.
    auto clientCtxSmart = osvr::common::wrapSharedContext(
        osvr::client::createAnalysisClientContext(
            "org.osvr.analysisplugin" /**< @todo */, "localhost" /**< @todo */,
            vrpn_ConnectionPtr(vrpnConn)));
    auto &dev = **device;
    /// pass ownership
    dev.acquireObject(clientCtxSmart);

    /// register client context update
    dev.setPreConnectionInteract([=] { clientCtxSmart->update(); });

    /// finally return the client context too.
    *clientCtx = clientCtxSmart.get();
    return OSVR_RETURN_SUCCESS;
}
Example #2
0
OSVR_ReturnCode osvrClientGetSkeletonBoneName(OSVR_Skeleton skel,
                                              OSVR_SkeletonBoneCount boneId,
                                              char *boneName, uint32_t len) {
    OSVR_VALIDATE_SKELETON_CONFIG;
    OSVR_VALIDATE_OUTPUT_PTR(boneName, "bone name");
    try {
        auto name = skel->getBoneName(boneId);
        if (name.size() + 1 > len) {
            /// buffer too small
            return OSVR_RETURN_FAILURE;
        }
        // this line pops warning 4996 on VS compiler, disabled above
        name.copy(boneName, name.size());
        boneName[name.size()] = '\0';
    } catch (osvr::client::IdNotFound &) {
        OSVR_DEV_VERBOSE(
            "Error getting name for provided boneId : Id not found");
        return OSVR_RETURN_FAILURE;
    } catch (std::exception &e) {
        OSVR_DEV_VERBOSE(
            "Error getting name for provided boneId : " << e.what());
        return OSVR_RETURN_FAILURE;
    }
    return OSVR_RETURN_SUCCESS;
}
Example #3
0
OSVR_ReturnCode
osvrClientGetSkeletonNumJoints(OSVR_Skeleton skel,
                               OSVR_SkeletonJointCount *numJoints) {
    OSVR_VALIDATE_SKELETON_CONFIG;
    OSVR_VALIDATE_OUTPUT_PTR(numJoints, "number of joints");
    *numJoints = skel->getNumJoints();
    return OSVR_RETURN_SUCCESS;
}
Example #4
0
OSVR_ReturnCode osvrClientGetSkeletonBoneId(OSVR_Skeleton skel,
                                            const char *boneName,
                                            OSVR_SkeletonBoneCount *boneId) {
    OSVR_VALIDATE_SKELETON_CONFIG;
    OSVR_VALIDATE_OUTPUT_PTR(boneId, "bone Id");
    if (!skel->getBoneId(boneName, boneId)) {
        OSVR_DEV_VERBOSE("Error getting boneId for " << boneName);
        return OSVR_RETURN_FAILURE;
    }
    return OSVR_RETURN_SUCCESS;
}
Example #5
0
OSVR_ReturnCode osvrClientGetSkeletonJointId(OSVR_Skeleton skel,
                                             const char *jointName,
                                             OSVR_SkeletonJointCount *jointId) {
    OSVR_VALIDATE_SKELETON_CONFIG;
    OSVR_VALIDATE_OUTPUT_PTR(jointId, "joint Id");
    if (!skel->getJointId(jointName, jointId)) {
        OSVR_DEV_VERBOSE("Error getting jointId for " << jointName);
        return OSVR_RETURN_FAILURE;
    }
    return OSVR_RETURN_SUCCESS;
}
Example #6
0
OSVR_CLIENTKIT_EXPORT OSVR_ReturnCode osvrClientGetSkeletonAvailableBoneId(
    OSVR_Skeleton skel, OSVR_SkeletonBoneCount boneIndex,
    OSVR_SkeletonBoneCount *boneId) {
    OSVR_VALIDATE_SKELETON_CONFIG;
    OSVR_VALIDATE_OUTPUT_PTR(boneId, "bone Id");
    if (!skel->getAvailableBoneId(boneIndex, boneId)) {
        OSVR_DEV_VERBOSE("ERROR getting the boneId for boneIndex "
                         << boneIndex);
        return OSVR_RETURN_FAILURE;
    }
    return OSVR_RETURN_SUCCESS;
}
Example #7
0
OSVR_CLIENTKIT_EXPORT OSVR_ReturnCode osvrClientGetSkeletonAvailableJointId(
    OSVR_Skeleton skel, OSVR_SkeletonJointCount jointIndex,
    OSVR_SkeletonJointCount *jointId) {
    OSVR_VALIDATE_SKELETON_CONFIG;
    OSVR_VALIDATE_OUTPUT_PTR(jointId, "joint Id");
    if (!skel->getAvailableJointId(jointIndex, jointId)) {
        OSVR_DEV_VERBOSE("ERROR getting the jointId for jointIndex "
                         << jointIndex);
        return OSVR_RETURN_FAILURE;
    }
    return OSVR_RETURN_SUCCESS;
}
Example #8
0
OSVR_ReturnCode osvrClientGetSkeletonStringBoneNameLength(
    OSVR_Skeleton skel, OSVR_SkeletonBoneCount boneId, uint32_t *len) {
    OSVR_VALIDATE_SKELETON_CONFIG;
    OSVR_VALIDATE_OUTPUT_PTR(len, "name length");
    try {
        auto boneName = skel->getBoneName(boneId);
        *len =
            static_cast<uint32_t>(boneName.empty() ? 0 : (boneName.size() + 1));
    } catch (osvr::client::IdNotFound &) {
        OSVR_DEV_VERBOSE(
            "Error getting name for provided boneId : Id not found");
        return OSVR_RETURN_FAILURE;
    } catch (std::exception &e) {
        OSVR_DEV_VERBOSE(
            "Error getting name for provided boneId : " << e.what());
        return OSVR_RETURN_FAILURE;
    }
    return OSVR_RETURN_SUCCESS;
}
Example #9
0
OSVR_ReturnCode
osvrClientGetSkeletonJointState(OSVR_Skeleton skel,
                                OSVR_SkeletonJointCount jointId,
                                OSVR_SkeletonJointState *state) {
    OSVR_VALIDATE_SKELETON_CONFIG;
    OSVR_VALIDATE_OUTPUT_PTR(state, "joint state");
    try {
        OSVR_Pose3 pose = skel->getJointState(jointId);
        state->jointId = jointId;
        state->pose = pose;
    } catch (osvr::client::NoPoseYet &) {
        OSVR_DEV_VERBOSE("Error getting pose for joint: no pose yet available");
        return OSVR_RETURN_FAILURE;
    } catch (std::exception &e) {
        OSVR_DEV_VERBOSE("Error getting joint pose - exception: " << e.what());
        return OSVR_RETURN_FAILURE;
    }

    return OSVR_RETURN_SUCCESS;
}