| 5486 | } |
| 5487 | |
| 5488 | XN_C_API XnStatus xnRegisterToUserExit(XnNodeHandle hInstance, XnUserHandler handler, void* pCookie, XnCallbackHandle* phCallback) |
| 5489 | { |
| 5490 | XN_VALIDATE_INTERFACE_TYPE(hInstance, XN_NODE_TYPE_USER); |
| 5491 | XN_VALIDATE_OUTPUT_PTR(phCallback); |
| 5492 | XnUserGeneratorInterfaceContainer* pInterface = (XnUserGeneratorInterfaceContainer*)hInstance->pModuleInstance->pLoaded->pInterface; |
| 5493 | XnModuleNodeHandle hModuleNode = hInstance->pModuleInstance->hNode; |
| 5494 | |
| 5495 | UserSingleCookie* pRegCookie; |
| 5496 | XN_VALIDATE_ALLOC(pRegCookie, UserSingleCookie); |
| 5497 | pRegCookie->handler = handler; |
| 5498 | pRegCookie->hNode = hInstance; |
| 5499 | pRegCookie->pUserCookie = pCookie; |
| 5500 | |
| 5501 | XnStatus nRetVal = XN_STATUS_OK; |
| 5502 | if (pInterface->User.RegisterToUserExit != NULL) |
| 5503 | { |
| 5504 | nRetVal = pInterface->User.RegisterToUserExit(hModuleNode, xnModuleUserSingle, pRegCookie, &pRegCookie->hCallback); |
| 5505 | } |
| 5506 | else |
| 5507 | { |
| 5508 | // Versions before 1.3.2 didn't have this API. Fabricate it. |
| 5509 | nRetVal = pInterface->User.RegisterUserCallbacks(hModuleNode, NULL, xnModuleUserSingle, pRegCookie, &pRegCookie->hCallback); |
| 5510 | } |
| 5511 | if (nRetVal != XN_STATUS_OK) |
| 5512 | { |
| 5513 | xnOSFree(pRegCookie); |
| 5514 | return (nRetVal); |
| 5515 | } |
| 5516 | |
| 5517 | *phCallback = pRegCookie; |
| 5518 | |
| 5519 | return XN_STATUS_OK; |
| 5520 | } |
| 5521 | XN_C_API void xnUnregisterFromUserExit(XnNodeHandle hInstance, XnCallbackHandle hCallback) |
| 5522 | { |
| 5523 | XN_VALIDATE_INTERFACE_TYPE_RET(hInstance, XN_NODE_TYPE_USER, ); |
no test coverage detected