Thanks, it wasnt as convoluted as it looked.
For anybody else searching the forum for answers:
You need to:
spAnimationState * animState = (( PiMesh2dData *)GetImplementationSpecificData( ))->GetAnimationState();
animState->listener(&callbackfunc)
void Callbackfunc (spAnimationState* state, int trackIndex, spEventType type, spEvent* event, int loopCount)
{
switch (type)
{
case SP_ANIMATION_START:
break;
case SP_ANIMATION_END:
break;
case SP_ANIMATION_COMPLETE:
break;
case SP_ANIMATION_EVENT:
............//check to see which event was triggered
}